这是我要做的事情:
我有一个包含多对输入字段和一个保存按钮的表单
按下保存按钮时,如果它们是数字且左侧值小于正确值,则应验证每对输入字段。
如果不是,则会显示验证错误,如果是这种情况,则会弹出一个对话框,询问应该保存的名称。
这是我到目前为止所得到的:
<h:form>
<ui:repeat value="#{myBean.someList}" var="elem">
<h:inputText id="min#{elem.id}" value="#{elem.minimum}" />
<h:inputText id="max#{elem.id}" value="#{elem.maximum}" />
<br />
<h:message for="min#{elem.id}" style="color:red" />
<h:message for="max#{elem.id}" style="color:red" />
</ui:repeat>
<h:commandButton value="save">
<f:ajax execute="@form" render="@form updateValidationFailedFlag"
onevent="
function(ajaxResult){
if(ajaxResult.status=='success' && !globalValidationFailedFlag)
showSaveDialog();
}"
/>
</h:commandButton>
<h:outputScript id="updateValidationFailedFlag">
globalValidationFailedFlag = #{facesContext.validationFailed};
</h:outputScript>
</h:form>
这有效但不检查最小值是否小于最大值。 它将验证输入(检查输入是否为整数),如果没有发生验证错误,则显示保存对话框。
要检查最小值是否小于我尝试遵循http://www.mkyong.com/jsf2/multi-components-validator-in-jsf-2-0/
教程的最大值Variant 1在验证完成后添加一个侦听器,并且能够添加浏览器中显示的错误消息。但这并不算作验证失败,也不设置facesContext.validationFailed标志。
Variant 2为一个组件编写自定义验证器,并将另一个组件作为该验证器的参数。这看起来像这样:
<f:validator validatorId="myValidator" />
<f:attribute name="maximum" value="#{max#{elem.id}}" />
这不是真正有效的EL,我不知道如何正确写它。
我该怎么做才能验证每个min-max对是否有效
答案 0 :(得分:1)
此处您不需要#{elem.id}
。 <ui:repeat>
已经处理了这个问题。无论如何,当JSF需要设置id
属性时,它将被评估为空字符串。
<ui:repeat value="#{myBean.someList}" var="elem">
<h:inputText id="min" value="#{elem.minimum}" />
<h:inputText id="max" value="#{elem.maximum}" />
<br />
<h:message for="min" style="color:red" />
<h:message for="max" style="color:red" />
</ui:repeat>
关于验证,只需传递其他组件的值:
<h:inputText id="min" binding="#{min}" value="#{elem.minimum}" />
<h:inputText id="max" value="#{elem.maximum}">
<f:validator validatorId="myValidator" />
<f:attribute name="min" value="#{min.value}" />
</h:inputText>
请注意,我将验证器移动到第二个组件。否则,如果第二个组件没有通过转换,它仍将被调用。
如果您碰巧使用JSF实用程序库OmniFaces,那么您可以使用其<o:validateOrder>
代替。
<h:inputText id="min" value="#{elem.minimum}" />
<h:inputText id="max" value="#{elem.maximum}" />
<o:validateOrder components="min max" showMessageFor="min" />