要件は、条件付きでフィールド検証をスキップすることです。ユーザーが[追加]を選択すると、フォームフィールドが検証され、値がテーブルに追加されます。[編集]をクリックすると、フォームフィールドの検証はスキップされますが、Beanの値は入力フィールドにコピーされます。
<composite:nameInput id="name" value="#{buyer.name}"
disableBeanValidation ="#{param['skipBeanValidation']}"/>
<h:commandLink action="#{buyerBacking.cancelEdit}" value="cancel"/>
<h:dataTable value="#{bean.list}">
<h:commandLink value="Edit" action="#{buyerBacking.edit}">
<f:param name="skipBeanValidation" value="true" />
</h:commandLink>
</h:dataTable>
<h:commandLink id="add" action="#{buyerBacking.add}"/>
名前入力複合コンポーネント
<h:inputText id="fName" value="#{bean.fname}">
<f:validateBean disabled="#{cc.attrs. disableBeanValidation}"/>
</h:inputText>
ユーザーがの詳細を入力して[追加]を選択すると、詳細がテーブルに追加されます。検証エラーの場合は、エラーメッセージを表示します。
次に、ユーザーが編集を選択すると、値が入力フィールドにコピーされます。ユーザーが編集のキャンセルを選択すると、値が入力フィールドから削除されます。ユーザーが再度編集を選択すると、インデックスの範囲外の例外エラーが発生します。name_firstNameの範囲外の例外にインデックスを付けます。
ただし、ユーザーが[追加]を選択し、[編集のキャンセル]が選択されている場合、これは発生しません。どういうわけかnullであるビューパラメータが渡されることと関係がありますか?
javax.faces.FacesException:IDがfrmAddAuthBuyerBR_inpAuthBuyerBRName_prefix_inputのコンポーネントの状態を復元するときに予期しないエラーが発生しました。原因:java.lang.IndexOutOfBoundsException:インデックス:0、サイズ:0。com.sun.faces.application.view.StateManagementStrategyImpl$ 2.visit(StateManagementStrategyImpl.java:272)at com.sun.faces.component.visit.FullVisitContext .invokeVisitCallback(FullVisitContext.java:151)at javax.faces.component.UIComponent.visitTree(UIComponent.java:1612)at javax.faces.component.UIComponent.visitTree(UIComponent.java:1626)atjavax.faces.component。 UIComponent.visitTree(UIComponent.java:1626)at javax.faces.component.UINamingContainer.visitTree(UINamingContainer.java:163)at javax.faces.component.UIComponent.visitTree(UIComponent.java:1626)at javax.faces.component .UIComponent.visitTree(UIComponent.java: