以下を実装する方法に関するベストプラクティスのガイダンスを探しています。JSF2、Spring 3、PrimeFaces 3.3、MyBatis を使用しています。
要件:
マネージド Bean のプロパティである VO オブジェクトにリンクされた入力フィールドを含むデータ入力画面があります。ユーザーは、新しいレコードを作成するか、既存のレコードを検索して編集することができます。
[既存のレコードを編集する] オプションを選択すると、ダイアログ ボックスが表示され、ユーザーは、そこから選択する可能性のあるレコードのリストを検索および取得できます。
一度に編集するレコードは 1 つしか選択できません。選択が完了すると、ダイアログ ボックスが閉じ、選択したデータが VO オブジェクトに入力され、ユーザーが編集できるようになります。
問題:
検索フォームが送信され、編集用の潜在的なレコードのリストを取得するときに、VO オブジェクトがまだ初期化されていないため、ProcessValidationPhase が「ターゲットに到達できません」というエラーでプロセスを失敗させます。
このシナリオを実装する最善の方法は何ですか? マネージ Bean で VO オブジェクトを空白の値で初期化する必要がありますか? または、マネージド Bean の初期化中に呼び出される VO オブジェクトに初期化メソッドが必要ですか?
DataEntry.XHTML
主なデータ入力フィールド:
<p:panelGrid id="dataEntry">
<p:row>
<p:column style="width:200px;">
<h:outputLabel value="Field 1:"/></p:column>
<p:column>
<p:inputText value="#{managedBean.dataEntryVo.field1}"
style="width:50px;"
disabled="true"/>
</p:column>
</p:row>
<p:row>
<p:column>
<h:outputLabel value="Field 2:"/>
</p:column>
<p:column>
<p:inputText value="#{managedBean.dataEntryVo.field2}"
style="width:50px;"
disabled="true"/>
</p:column>
</p:row>
</p:panelGrid>
編集するために選択できるレコードのリストを取得するために使用されるダイアログ ボックスのコマンド ボタン:
<p:commandButton id="retrieveDataCb"
value="Retrieve"
actionListener="#{managedBean.retrieveDataEntryList}"
update=":dataEntryForm:retrievedList">
</p:commandButton>
どうもありがとう