0

我正在尝试从另一个 selectOneMenu 的结果中更新一个 selectOneMenu。

选择组时,应更新用户菜单。

我已验证用户菜单的数据正在更新。然而,它没有被渲染。

当前运行 Primefaces 3.4.2 和 JSF 2.1

<ui:composition>
<br/><br/>
<h:form id="transferForm">            
    <h:panelGrid columns="1" style="width: 500px;margin: auto;text-align: center"  >
        <h:panelGroup>
            <h:outputLabel for="group" value="Group" />
            <h:selectOneMenu id="group" value="#{projectBean.transferUtil.selectedTransferGroup}" >
                <f:selectItems value="#{projectBean.transferUtil.transferGroups}" />     
                <f:ajax execute="group" render="user" />
            </h:selectOneMenu>


            <br />

            <h:outputLabel for="user" value="User" />
            <h:selectOneMenu id="user" value="#{projectBean.transferUtil.selectedTransferUser}" required="true" requiredMessage="Select User" >
                <f:selectItems value="#{projectBean.transferUtil.transferUsers}" />
            </h:selectOneMenu>
        </h:panelGroup>
        <p:commandButton id="projectTransferButton" action="#{projectBean.transferUtil.transfer}" value="Transfer" update=":projtabs,:growlForm:growlMesg">
            <f:setPropertyActionListener target="#{projectBean.activeTab}" value="#{projectBean.project_tab_index}" />
        </p:commandButton>
    </h:panelGrid>
</h:form>
<br/><br/>

[编辑]

好吧,这是我得到的错误。

<?xml version='1.0' encoding='UTF-8'?>
<partial-response><error><error-name>class java.lang.IllegalArgumentException</error-name><error-message><![CDATA[rss02.1 OPERA]]></error-message></error></partial-response>

这是有问题的代码。

    <p:dataGrid var="area" value="#{projectBean.projectUtil.project.rssAreas}" columns="1">
        <p:column>
            <h:selectBooleanCheckbox id="rss#{area.shortName}" label="#{area.name}" value="#{area.active}" />
            <h:outputText value="#{area.name}" />
        </p:column>
    </p:dataGrid>  
4

1 回答 1

1

您不应该在 getter/setter 中执行业务逻辑。它们在 JSF 生命周期中被多次调用,旨在获取和设置属性。您应该改为在 action(listener) 方法中执行业务逻辑。

以下构造应该起作用:

<h:selectOneMenu id="group" value="#{projectBean.transferUtil.selectedTransferGroup}" >
    <f:selectItems value="#{projectBean.transferUtil.transferGroups}" />     
    <f:ajax execute="group" listener="#{projectBean.transferGroupChanged}" render="user" />
</h:selectOneMenu>
<h:selectOneMenu id="user" value="#{projectBean.transferUtil.selectedTransferUser}" required="true" requiredMessage="Select User" >
    <f:selectItems value="#{projectBean.transferUtil.transferUsers}" />
</h:selectOneMenu>

public void transferGroupChanged(AjaxBehaviorEvent event) {
    // Change the transferUsers here.
}

getter 和 setter 不应包含任何业务逻辑。他们应该只获取和设置属性。

也可以看看:

于 2013-01-09T16:45:22.173 回答