0

「selectOneMenu」が「dataTable」列ヘッダーに配置されると、1) 行が開かれるたびに、またはその横のボタンがクリックされて「selectOneMenu」が開かれた後に、行の並べ替えがトリガーされます (そのようなものであってはなりません)。2) バッキング Bean に値を割り当てることができません。これらの問題が発生しないように、列ヘッダーに「selectOneMenu」を付けるにはどうすればよいですか?

* 1) および 2) の問題を引き起こす dataTable を含む .xhtml コード:

<h:form id="someForm0">
    <p:dataTable id="sdt" var="variable" value="#{otherBean.tableModel}" rows="10">
            <p:column sortBy="#{variable.name}" filterBy="#{variable.name}"  filterMatchMode="contains" >
                <f:facet name="header">
                    <h:outputText value="Name"/>
                    <h:panelGrid columns="2" cellpadding="1">
                            <p:selectOneMenu id="abc" value="#{userBean.someChars}">
                            <f:selectItem itemLabel="" itemValue="select" />
                            <f:selectItem itemLabel="AAA" itemValue="AAA" />
                            <f:selectItem itemLabel="BBB" itemValue="BBB" />
                            <f:selectItem itemLabel="CCC" itemValue="CCC" />
                        </p:selectOneMenu>
                        <h:commandButton id="btn" value="Submit" type="submit" action="#{userBean.submitChars}"/>
                        </h:panelGrid>
                </f:facet>  
                <h:outputText value="#{variable.name}"/>  
            </p:column>  
    </p:dataTable>
</h:form>

バッキング Bean コード:

@ManagedBean
public class UserBean
{
    private String someChars;

    public String getSomeChars()
    {
        return someChars;
    }

    public void setSomeChars(String someChars)
    {
        this.someChars = someChars;
    }

    public String submitChars()
    {
       if(getSomeChars() != null)
       {
           System.out.println("Selected chars are: " + getSomeChars());
       }
       else
       {
            System.out.println("Selected chars are equal to null!");
       }
       return null;
    }
}

前述の *.xhtml コードの一部を次に示します。selectOneMenu は、基本的なフォームに配置するとうまく機能します。

<h:form id="someForm">
    <p:selectOneMenu id="abc" value="#{userBean.someChars}">
        <f:selectItem itemLabel="" itemValue="select" />
        <f:selectItem itemLabel="AAA" itemValue="AAA" />
        <f:selectItem itemLabel="BBB" itemValue="BBB" />
        <f:selectItem itemLabel="CCC" itemValue="CCC" />
    </p:selectOneMenu>
    <h:commandButton id="btn" value="Submit" type="submit" action="#{userBean.submitChars}"/>
</h:form>

最後の手段は、dataTable 列ヘッダーから dataTable ヘッダーに要素を追加することだと思います。

<h:form id="someForm1">
    <p:dataTable id="sdt" var="variable" value="#{otherBean.tableModel}" rows="10">
            <f:facet name="header">
                <h:panelGrid columns="2" cellpadding="1">
                    <p:selectOneMenu id="abc" value="#{userBean.someChars}">
                        <f:selectItem itemLabel="" itemValue="select" />
                        <f:selectItem itemLabel="AAA" itemValue="AAA" />
                        <f:selectItem itemLabel="BBB" itemValue="BBB" />
                        <f:selectItem itemLabel="CCC" itemValue="CCC" />
                    </p:selectOneMenu>
                    <h:commandButton id="btn" value="Submit" type="submit" action="#{userBean.submitChars}"/>
                </h:panelGrid>
            </f:facet>
            <p:column sortBy="#{variable.name}" filterBy="#{variable.name}"  filterMatchMode="contains" >
                <f:facet name="header">
                    <h:outputText value="Name"/>
                </f:facet>  
                <h:outputText value="#{variable.name}"/>  
            </p:column>  
    </p:dataTable>
</h:form>
4

1 に答える 1