我需要在接缝中验证两个用户输入字段。对于 ui:repeat 标记中的每一行,Field1 必须大于 Field2。截至目前,我将两个字段包装在一个 s:decorate 标记中,该标记将所有输入包装在一个 s:validateAll 标记中。如果其中任何一个验证失败,这允许我将错误消息浮动到字段的右侧。
例如(我不能插入图片,所以我必须使用ascii图片,低质量请见谅,斜体表示红色文字):
标签: | 黄色 | 0|% 红色:| 0%| | Yellow 和 Red 必须介于 0 和 100 之间,并且 Yellow 必须大于 Red。
标签: | 黄色 | 0|% 红色:| 0%| | Yellow 和 Red 必须介于 0 和 100 之间,并且 Yellow 必须大于 Red。
下面是两个控件和装饰 xhtml。注意:“0 到 100 之间的值”验证已经通过 hibernate 注释处理。我只需要知道如何相互验证这两个字段以确保黄色大于红色,并且仍然显示错误消息。
我想要的解决方案是为相应的 s:decorate 标签设置 #{invalid} 属性,这样会显示错误消息,但我会接受任何想法。
输入:
<table>
<ui:repeat value="#{action.List}" var="var">
<s:decorate template="/layout/decorateMultipleInputs.xhtml" >
<ui:define name="label">
Label:
</ui:define>
<ui:define name="input">
<h:panelGrid columns="8" frame="border">
<h:outputText value="Yellow:" />
<h:inputText value="#{var.yellow}" style="width:25px; text-align:right" maxlength="3"/>
%
<h:outputText value="Red:" />
<h:inputText value="#{var.red}" style="width:25px; text-align:right" maxlength="3"/>
%
</h:panelGrid>
</ui:define>
<ui:define name="message">Yellow and Red must be between 0 and 100, and Yellow must be greater than Red.
</ui:define>
</s:decorate>
</ui:repeat>
</table>
和 decorateMultipleInputs.xhtml:
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:s="http://jboss.com/products/seam/taglib">
<tr>
<td>
<s:label styleClass="#{invalid?'error':''}">
<ui:insert name="label"/>
<s:span styleClass="required" rendered="#{required}">*</s:span>
</s:label>
</td>
<td>
<s:validateAll>
<ui:insert name="input"/>
</s:validateAll>
</td>
<td>
<s:div styleClass="error" rendered="#{invalid}">
<h:graphicImage value="/images/error.gif" />
</s:div>
</td>
<td>
<s:div styleClass="error" rendered="#{invalid}">
<ui:insert name="message"/>
</s:div>
</td>
</tr>
</ui:composition>