私はdatatable内でactionListener ajax呼び出しを使用しており、次のことをしようとしています:
- 検証をスキップ
- 挿入された値でモデルを更新します
BalusC による omnifaces ユーティリティ liberary が o:ignoreValidationFailed を使用してこれを実行できることは知っていましたが、primefaces データテーブル内で作業するのに失敗しました。
また、バグかどうかはわかりませんが、ここの別の投稿で ui:repeat 内で動作しないことがわかりました。これが私のコード例です
<o:form id ="trans_desc_form">
<p:outputPanel id="stkdetailsid">
<p:dataTable id="transactiondetailsid" value="#{stockTransactionsBean.stkTransHeader.stkTransDetailsList}"
var="stkTransDet" rowIndexVar="rowIndex">
<p:column>
<f:facet name="header">
<h:outputText value="Item Code" />
</f:facet>
<p:autoComplete id="dd" required="true"
value="#{stkTransDet.item}" var="i" itemLabel="#{i.itemno} #{i.itemnamee}"
itemValue="#{i}" converter="itemsConverter"
completeMethod="#{stockTransactionsBean.completeItems}"/>
</p:column>
<p:column>
<p:commandButton value="-" update="@form" process="@form"
actionListener="#{stockTransactionsBean.removeRow(rowIndex)}">
<o:ignoreValidationFailed />
</p:commandButton>
</p:column>
</p:dataTable>
</p:outputPanel>
</o:form>
回避策として、追加しました
1-必要なフィールドに条件を追加して、ajaxが送信ボタンから来ているかどうかを知るために、trans_desc_formがフォームID全体であり、savetransidが送信ボタンの保存IDであるautoCompleteコンポーネントにないかどうかを確認します
required="#{!empty param['trans_desc_form:savetransid']}"/>
2-検証を強制するJPAエンティティから@NotNullを削除しました
@JoinColumn(name = "ITEMNO", referencedColumnName = "ITEMNO")
@ManyToOne(optional = false, fetch = FetchType.LAZY)
//@NotNull
private Item item;