3

プライムフェイスを使用して JSF アプリケーションを作成しています。基本的に私はこの見解を持っています。各タブにコマンド ボタンとアコーディオン パネル (別の種類のタブ ビュー) を含むタブ ビューがあります。アコーディオン パネルのタブには、さまざまな要素があり、それぞれ 1 つのコマンド ボタンが含まれています。私の問題は、最初のコマンド ボタン (1 レベルのタブの下) がクリックされたときにアクション メソッドを正しく呼び出すのに対し、2 番目のボタン (2 レベルのタブの下) は呼び出さないことです。tabView と accordionPanel は、表示すべき情報を表示しているため、どちらも正しく機能していると言わざるを得ません。

何が起こっているのかを確認できるように、ビューの簡略化されたバージョンを投稿しています。

<h:form>
<p:tabView id="unitTabs"  orientation="left" dynamic="true" cache="false" var="unit" value="#{unitController.getUnitsOfLoggedInUser(loginController.checkedUser)}">
    <p:tab id="unitTab" title="#{unit.unitName}">

    <p:commandButton value="Add Lecture" action="#{unitController.setTemporary(unit)}" onclick="createLectureDialog.show()">

    <p:accordionPanel id="lectureTabs" value ="#{lectureController.getLecturesForUnit(unit)}" var="lecture" dynamic="true" cache="false">

         <p:tab title="#{lecture.lectureName}">
              <p:commandButton value="Add Criterion" action ="#{lectureController.setTemporary(lecture)}" onclick="createCriterionDialog.show()" >
         </p:tab>
     </p:accordionPanel>
     </p:tab>
</p:tabView>
</h:form>

私は何を間違っていますか?ありがとう

4

1 に答える 1

5

この構成では、およびの属性のEL式が、フォーム送信の処理中に最初の表示時とまったく同じ値をvalue返す必要あります。<p:tabView><p:accordionPanel>

Beanがリクエストスコープであるか、値がリクエストベースのパラメータまたは変数の舞台裏に依存しているため、リクエストごとに異なる値を返す場合、JSFは呼び出されたボタンを見つけることができないため、失敗します。これを修正するには、Beanをビュースコープに配置する必要があり、getterメソッドにビジネスロジックが含まれていないか、リクエストベースのパラメータまたは変数が後続のリクエストに保持されている必要があります。

参照:

于 2012-06-20T20:25:08.450 に答える