0

別のselectOneMenuの結果からselectOneMenuを更新しようとしています。

グループを選択すると、ユーザーメニューが更新されます。

ユーザーメニューのデータが更新されていることを確認しました。ただし、レンダリングされていません。

現在実行中のPrimefaces3.4.2およびJSF2.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

ゲッター/セッターでビジネス ロジックを実行しないでください。これらは 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.
}

ゲッターとセッターにはビジネス ロジックを含めないでください。プロパティを取得して設定するだけです。

以下も参照してください。

于 2013-01-09T16:45:22.173 に答える