不,這是不可能的。 components
屬性必須在物理上指代多個組件,而不是多次呈現的單個組件。但是,它可以用於物理上在同一輪迭代中呈現的多個組件。 <o:validateXxx>
多字段驗證程序不用於引用多次呈現的單個組件。唯一的OmniFaces驗證程序是<o:validateUniqueColumn>
。
如果您想在基於集合的動態輸入上使用<o:validateXxx>
多字段驗證程序,那麼最好的方法是使用JSTL <c:forEach>
。它將在物理上構建多個組件。
E.g.
<c:forEach items="#{bean.items}" var="item" varStatus="loop">
<h:inputText id="input_#{loop.index}" value="#{item.value}" />
</c:forEach>
假設有3個項目,這將動態地創建JSF組件與input_0
,input_1
和input_2
的ID。然後,你可以只使用<o:validateXxx>
如下(把它的循環外!)
<o:validateAllOrNone components="input_0 input_1 input_2" />
可以通過EL表達式從背襯返回組件ID的所需空間分隔的字符串替換在上述例子中的硬編碼的串豆。
<o:validateAllOrNone components="#{bean.inputIds}" />
另一種方法是自己創建一個<x:validateAllOrNoneColumn>
或張貼在OmniFaces問題跟蹤改進請求。改變現有的<o:validateAllOrNone>
並不是完全微不足道的,即需要完全獨立的組件。
啊好吧,感謝迄今,所以我認爲最好的方法是使用此C:foreach方法... – J4y