0

プロパティ注入が ViewScoped Bean でどのように機能するかを正確に確認しようとしていました。

List from One to Two を問題なく挿入します。Two to Three から同じ List を注入しようとすると、何も注入されませんが、それは意図した動作だと思います (ただし、間違っている可能性があります)。

ただし、SelectOneMenu of Two から選択した値を Three に注入しようとすると、何も注入されません。

私が見逃しているものはありますか、それとも通常の動作ですか? もしそうなら、どうすれば Three でその値を取得できますか?

One.java

@ManagedBean
@ViewScoped
public class One implements Serializable {

    private List<String> oneList;

    @PostConstruct
    void init() {
        setOneList(new ArrayList<String>());
        getOneList().add("aaa");
        getOneList().add("bbb");
        getOneList().add("ccc");
        getOneList().add("ddd");
    }

    //Getters + setters...
}

one.xhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition template="/WEB-INF/template.xhtml"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui">
    <ui:define name="header">
        <h:outputText value="ONE" />
    </ui:define>
    <ui:define name="content">
        <h:form>
            <p:commandButton value="two" action="two" ajax="false" />
        </h:form>
    </ui:define>
</ui:composition>

二.java

@ManagedBean
@ViewScoped
public class Two implements Serializable {

    @ManagedProperty("#{one.oneList}")
    private List<String> oneList;

    private String twoChoice;

    //Getter + setters...
}

two.xhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition template="/WEB-INF/template.xhtml"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui">
    <ui:define name="header">
        <h:outputText value="TWO" />
    </ui:define>
    <ui:define name="content">
        <h:form>
            <p:selectOneMenu id="test" value="#{two.twoChoice}">
                <f:selectItems value="#{two.oneList}" />
            </p:selectOneMenu>
            <p:commandButton value="three" action="three" ajax="false" />
        </h:form>
    </ui:define>
</ui:composition>

Three.java

@ManagedBean
@ViewScoped
public class Three implements Serializable {
    @ManagedProperty("#{two.oneList}")
    private List<String> oneList;

    @ManagedProperty("#{two.twoChoice}")
    private String twoChoice;

    private String threeChoice;

    //Getters + setters...
}

three.xhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition template="/WEB-INF/template.xhtml"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui">
    <ui:define name="header">
        <h:outputText value="THREE" />
    </ui:define>
    <ui:define name="content">
        <h:outputText value="#{three.twoChoice}" />
    </ui:define>
    <h:form>
        <p:selectOneMenu value="#{three.threeChoice}">
            <f:selectItems value="#{three.oneList}" />
        </p:selectOneMenu>
    </h:form>
</ui:composition>
4

1 に答える 1