在我的一个项目中,我们使用 jsf/primefaces 进行开发,并且有特定要求不要对模糊或更改输入字段的事件进行任何 ajax 调用。
我们需要显示记录列表。用户还可以添加或删除记录。
我正在使用下面的 xhtml 代码
<h:form id="wizard_form">
<p:outputPanel id="idBiomassPlantsPanel">
<ui:repeat var="item" value="#{controller.iteamList}">
<p:inputText id="field1" value="#{item.field}">
<f:validateLongRange maximum="10" minimum="2" />
</p:inputText>
<p:message display="text" for="field1" />
<p:commandLink id="idDeleteBiomassPlantsLink" value="Delete record"
update="wizard_form:idBiomassPlantsPanel" immediate="true"
process="@this" actionListener="#{controller.deleteBioMassPlants()}">
</p:commandLink>
</ui:repeat>
<p:inputText id="testfield" value="#{controller.field}">
<f:validateLongRange maximum="10" minimum="2" />
</p:inputText>
</p:outputPanel>
<p:commandButton id="addBiomassPlantsButton" value="add new"
action="#{controller.addBioMassPlantsData}" update="@form"
process="@form" />
</h:form>
单击“添加新”按钮时,我们正在处理整个 UI 表单。这个按钮工作正常。如果用户单击“删除记录”按钮,我不想触发验证,因为即使输入了不正确的值,用户也应该能够删除记录。我使用了 immediate="true" 来跳过验证,但在这种情况下,所有输入字段都会重置为 NULL 或其他未删除记录的初始值(例如:如果我输入三个记录并且第二个记录被删除,那么第三个记录的值用 null 更新。)
我在使用 process="@this" 时尝试删除 immediate="true" 然后我也面临同样的问题。
我在 UI 重复之外创建了一个测试输入字段。单击删除按钮不会更改此字段的值。所以似乎问题在于只有输入字段在 UI:repeat 内。
非常感谢对此的任何帮助或指示。