我在数据表中使用 actionListener ajax 调用并尝试执行以下操作:
- 跳过验证
- 使用插入的值更新模型
我知道 BalusC 的 omnifaces 实用程序库可以使用 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 是否来自提交按钮到 autoComplete 组件,其中 trans_desc_form 是整个表单 ID,savetransid 是提交按钮保存 ID
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;