Что касается связи между управляемым компонентом в JSF - PullRequest
3 голосов
/ 06 мая 2010

Кажется, я не совсем понял свой предыдущий вопрос об управляемом бобе. Итак, я публикую это снова более систематическим образом.

У меня есть одна страница:

<?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() {
    }

}

Это data.xhtml, который использует master.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 (). Как мне получить значение другого компонента в этом компоненте?

1 Ответ

4 голосов
/ 06 мая 2010

Как вы можете узнать из JSF2 tutorial , можно использовать функцию внедрения зависимостей. В вашем случае речь идет о внедрении MasterBean экземпляра в pageBean. Я полагаю, что у вас может быть что-то подобное в вашем pageBean:

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

    private String content;

    @ManagedProperty(value="#{MasterBean}")
    private MasterBean masterBean;

    ...

a, затем используйте его в своих методах:

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

Я сам этого не пробовал. Я надеюсь, что это сработает.

Кстати, настоятельно рекомендуется не начинать имя класса с маленькой буквы. Таким образом, pageBean класс должен называться PageBean.

...