我在h:form
里面有一个h:dataTable
,其中每一行都有自己的h:commandButton type="submit" action="#{bean.saveChanges(item)}"
。
f:inputs
被声明为required
,它们还需要匹配pattern
。
如果每个输入的格式正确,那么它就可以正常工作。
否则,它只需要一个输入是错误的,并且对应于另一行中完全不同的项目的commandButton
上的更新函数似乎不会被调用,因此不会在数据库中更新。
此外,仅显示错误行的验证消息,并且更改由(支持Spring视图范围的(bean在视图中维护,因此用户实际上可能会认为,初始行确实也在数据库中更新了。
有没有办法,如何分隔h:dataTable
的各个行,以便另一行的验证消息不会阻止其他项目通过(弹簧/背(bean的方法更新?
使用 ajax 仅处理/执行当前行。您可以通过在 <f:ajax execute>
中显式指定输入组件的客户端 ID 来实现这一点。
<h:form>
<h:dataTable ...>
<h:column>
<h:inputText id="foo" ... />
</h:column>
<h:column>
<h:inputText id="bar" ... />
</h:column>
<h:column>
<h:inputText id="baz" ... />
</h:column>
<h:column>
<h:commandButton ...>
<f:ajax execute="foo bar baz @this" ... />
</h:commandButton>
</h:column>
</h:dataTable>
</h:form>
这不会处理其他行中的输入。如有必要,请使用<f:ajax render>
更新与输入关联的<h:message(s)>
。
另请参阅:
- 了解 PrimeFaces 进程/更新和 JSF f:ajax 执行/渲染属性
输入上的必需值会导致进程验证失败并调用呈现响应。
一个简单的解决方案可能是 您可以从输入中删除所需的内容,并在托管 Bean 中处理这种情况。由于该操作将持续到阶段 5:调用应用程序,因此可以保存有效数据。对于所有无效行,通过在数据模型中使用布尔值来突出显示该行。