JSF 验证错误阻止更新放置在 h:form 中的 h:dataTable 的另一个有效行



我在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:调用应用程序,因此可以保存有效数据。对于所有无效行,通过在数据模型中使用布尔值来突出显示该行。

最新更新