0

当“selectOneMenu”放置在“dataTable”列标题中时:1)每次打开它或单击它旁边的按钮并打开“selectOneMenu”后触发行排序(不应该那样);2) 未能为支持 bean 赋值。如何将“selectOneMenu”附加到列标题以便不会发生这些问题?

*.xhtml 代码与 dataTable 导致 1) 和 2) 问题:

<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

0

尝试如下:

<h:form id="someForm0">
    <p:dataTable id="sdt" ...>
        <p:column headerText="header">
                <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:ajax event="valueChange" update=":someForm0:sdt"/>
                </p:selectOneMenu>  
        </p:column>
    </p:dataTable>
    <h:commandButton ....>
</h:form>

用户Bean.java

private String someChars;

public String getSomeChars() {
    return someChars;
}

public void setSomeChars(Stirng someChars) {
    this.someChars = someChars;
}
于 2013-07-23T11:50:41.813 回答