【问题标题】:Regarding communication between managed bean in JSF关于JSF中托管bean之间的通信
【发布时间】:2010-05-06 08:08:29
【问题描述】:

我之前关于托管 bean 的问题似乎并不清楚。所以,我以更系统的方式再次发布它。

我只有一页:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <ui:insert name="head">

        </ui:insert>

        <br/><br/>
        <h:inputText value="#{MasterBean.laala}"/>
        <br/><br/>

        <ui:insert name="content">

        </ui:insert>
    </h:body>
</html>

这是它的豆子:

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;


@ManagedBean(name="MasterBean")
@ViewScoped
public class MasterBean {

    private String laala;

    public String getLaala() {
        return laala;
    }

    public void setLaala(String laala) {
        this.laala = laala;
    }


    public MasterBean() {
    }

}

这是使用 master.xhtml 的 data.xhtml:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <ui:composition template="master.xhtml">
            <ui:define name="head">
                laala
            </ui:define>

            <h:outputText value="#{pageBean.content}"/>

            <ui:define name="content">
                <h:commandButton actionListener="#{pageBean.speakHello}"/>
            </ui:define>>


        </ui:composition>
    </h:body>
</html>

这是它的豆子:

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;


@ManagedBean(name="pageBean")
@ViewScoped
public class pageBean {

    private String content;

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }


    public void speakHello(){
        //how do i get value of laaala here which is in MasterBean???
        content = ??? + " Hello friend";
    }

    public pageBean() {
    }

}

我应该在speakHello() 中标记??? 的空白处填写什么。如何获取此 bean 中其他 bean 的值?

【问题讨论】:

    标签: jsf facelets


    【解决方案1】:

    您可以在JSF2 tutorial 中了解到,可以使用依赖注入功能。在您的情况下,这将是关于将MasterBean 实例注入pageBean。我相信您的pageBean 中可能会有这样的内容:

    @ManagedBean(name="pageBean")
    @ViewScoped
    public class pageBean {
    
        private String content;
    
        @ManagedProperty(value="#{MasterBean}")
        private MasterBean masterBean;
    
        ...
    

    然后在你的方法中使用它:

     public void speakHello(){
        //how do i get value of laaala here which is in MasterBean???
        content = masterBean.getLaala() + " Hello friend";
     }
    

    我自己没试过。我希望它会起作用。

    顺便说一句,强烈建议不要以小写字母开头类名。所以pageBean 类应该改成PageBean

    【讨论】:

    • 太棒了! GrzegorzOledzki :)。投票并勾选正确答案。首先,我遇到了异常,但幸运的是它抛出了有意义的异常,即 getter 和 setter 不存在。一旦我创建了它们,它就可以正常工作了。哇再次感谢:)
    • 另请注意,使用 ManagedBean 不是“最佳实践”。它已从 JSF 2.3 中弃用。您可以改用 Named 注释并注入 MasterBean 实例。如果您使用的是 JSF 2.0 或 2.1,那很好,因为这些版本中没有本机 CDI 视图范围。
    猜你喜欢
    • 2011-12-05
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2016-07-09
    • 1970-01-01
    • 2012-10-13
    • 2011-07-10
    相关资源
    最近更新 更多