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

时间:2016-04-07 17:15:28

标签: jsf

我在h:dataTable内有一个h:form,其中每一行都拥有h:commandButton type="submit" action="#{bean.saveChanges(item)}"

f:inputs被声明为required,他们还需要匹配pattern

如果每个输入格式正确,那么它可以正常工作。

否则它只需要一个输入是错误的,并且commandButton上对应于另一行中完全不同的项的更新函数似乎不会被调用,因此不会在数据库中更新。

此外,只显示错误行的验证消息,并且(支持Spring视图作用域)bean在视图中维护更改,因此用户可能会认为初始行是< / em>确实在数据库中更新了。

有没有办法,如何分隔h:dataTable的各个行,以便另一行的验证消息不会阻止其他项通过(Spring / backing)bean的方法更新?< / p>

2 个答案:

答案 0 :(得分:2)

使用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)>

另见:

答案 1 :(得分:-2)

输入上的必需项导致进程验证失败并调用渲染响应。

一个简单的解决方案可能是您可以从输入中删除所需的内容并处理托管bean中的大小写。由于操作将持续到第5阶段:调用应用程序,因此可以保存有效数据。对于所有无效行,通过在数据模型中使用布尔值来突出显示该行。