Jas*_*ies 5 validation jsf uirepeat validatelongrange
我正在使用com.sun.faces版本2.1.18.在我的应用程序中,我有一个动态的问题列表.我<ui:repeat>用来渲染每个问题.根据问题的类型,我呈现一种输入组件和验证.在一些范围问题,我使用的情况下<h:inputText>用<f:validateLongRange>.
我遇到的问题是它的minimum和maximum属性<f:validateLongRange>总是设置为第一个问题的最小值和最大值.因此,当您在任何其他问题上使用验证器时,第一个问题就会失败.这应该发生吗?有没有办法让验证工作在动态生成的组件上?我希望无需切换即可解决<c:forEach>.
代码段:
<ui:repeat value="#{questionnaire.questionsCollection}"
           var="question">
  ..
  <h:inputText value="..">
    <f:validateLongRange minimum="#{question.minimumValue}"
                         maximum="#{question.maximumValue}"/>
  </h:inputText>
  ..
</ui:repeat>
我输出#{question.minimumValue}和#{question.maximumValue},他们有正确的价值观我的问题.
这确实是指定/预期的行为.<f:validateXxx>在视图构建期间评估标记处理程序的属性.所以他们不能引用一个只在视图渲染时间可用的变量,就像当前迭代的变量一样<ui:repeat>.当您使用在视图构建期间运行的迭代器(如JSTL)时,它确实会起作用<c:forEach>.这里给出了关于视图构建时间与视图渲染时间的更详细解释:JSF2 Facelets中的JSTL有意义吗?
您有基本相同的问题,如此处详细说明:如何为数据表的每一行设置转换器属性?它详细概述了各种解决方案.在您的特定情况下,其中一个解决方案是使用OmniFaces <o:validator>,它可以对所有属性进行渲染时评估,这样您就可以更换
<f:validateLongRange minimum="#{question.minimumValue}"
                     maximum="#{question.maximumValue}" />
通过
<o:validator validatorId="javax.faces.LongRange" 
             minimum="#{question.minimumValue}"
             maximum="#{question.maximumValue}" />
为了让它按照需要工作.
也可以看看:
| 归档时间: | 
 | 
| 查看次数: | 1642 次 | 
| 最近记录: |