是否可以在or中使用 OmniFaces <o:validateAllOrNone>
(这很酷;))?<ui:repeat>
<h:dataTable>
我需要一个表格,每行都有一个输入字段列。您可以不填写这些值,也可以全部填写。
如果我将or<o:validateAllOrNone>
放在<ui:repeat>
or<h:dataTable>
中并在属性中使用输入字段的 id components
,那么如果所有字段都为空,验证器也会被触发。
是否可以在or中使用 OmniFaces <o:validateAllOrNone>
(这很酷;))?<ui:repeat>
<h:dataTable>
我需要一个表格,每行都有一个输入字段列。您可以不填写这些值,也可以全部填写。
如果我将or<o:validateAllOrNone>
放在<ui:repeat>
or<h:dataTable>
中并在属性中使用输入字段的 id components
,那么如果所有字段都为空,验证器也会被触发。
不,那是不可能的。该components
属性必须在物理上引用多个组件,而不是多次呈现的单个组件。但是,它可以用于在同一迭代轮次中渲染的物理多个组件。多<o:validateXxx>
字段验证器并非旨在引用多次呈现的单个组件。唯一这样做的 OmniFaces 验证器是<o:validateUniqueColumn>
.
如果您想在<o:validateXxx>
基于集合的动态输入上使用多字段验证器,那么最好的选择是使用 JSTL <c:forEach>
。它将在物理上构建多个组件。
例如
<c:forEach items="#{bean.items}" var="item" varStatus="loop">
<h:inputText id="input_#{loop.index}" value="#{item.value}" />
</c:forEach>
假设有 3 个项目,这将动态创建 ID 为input_0
、input_1
和的 JSF 组件input_2
。然后你可以<o:validateXxx>
按如下方式使用(把它放在循环之外!)
<o:validateAllOrNone components="input_0 input_1 input_2" />
您可以将上面示例中的硬编码字符串替换为 EL 表达式,该表达式从支持 bean 返回所需的空格分隔的组件 ID 字符串。
<o:validateAllOrNone components="#{bean.inputIds}" />
另一种方法是创建<x:validateAllOrNoneColumn>
自己或在 OmniFaces 问题跟踪器上发布增强请求。<o:validateAllOrNone>
改变现有的需要完全独立的组件并不是一件容易的事。