Ajax不为<h:selectonemenu> </h:selectonemenu>呈现新数据

时间:2013-01-09 16:08:37

标签: ajax jsf-2 primefaces

我正在尝试从另一个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>  

1 个答案:

答案 0 :(得分:1)

您不应该在getter / setter中执行业务逻辑。它们在JSF生命周期中被多次调用,并且用于获取和设置属性。您应该在操作(侦听器)方法中执行业务逻辑。

以下构造应该有效:

<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应该包含任何业务逻辑。他们应该只是获得和设置财产。

另见: