Validation 在ui中使用带有变量属性的验证器:重复

Validation 在ui中使用带有变量属性的验证器:重复,validation,jsf,uirepeat,validatelongrange,Validation,Jsf,Uirepeat,Validatelongrange,我正在使用com.sun.facesversion2.1.18。在我的应用程序中,我有一个动态的问题列表。我使用呈现每个问题。根据问题的类型,我呈现一种类型的输入组件和验证。如果是数字范围问题,我将与一起使用 我遇到的问题是上的最小值和最大值属性总是设置为第一个问题的最小值和最大值。因此,当您在任何其他问题上使用验证器时,第一个问题就失败了。这应该会发生吗?有没有一种方法可以让验证在动态生成的组件上工作?我希望不用切换到就可以解决这个问题 代码段: <ui:repeat value="#{

我正在使用
com.sun.faces
version
2.1.18
。在我的应用程序中,我有一个动态的问题列表。我使用
呈现每个问题。根据问题的类型,我呈现一种类型的输入组件和验证。如果是数字范围问题,我将
一起使用

我遇到的问题是
上的
最小值和
最大值属性总是设置为第一个问题的最小值和最大值。因此,当您在任何其他问题上使用验证器时,第一个问题就失败了。这应该会发生吗?有没有一种方法可以让验证在动态生成的组件上工作?我希望不用切换到
就可以解决这个问题

代码段:

<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.maxiumvalue}
,它们具有正确的问题值。

这确实是指定/预期的行为。标记处理程序的属性(如
)在视图构建期间进行评估。因此,它们不能引用仅在视图渲染时可用的变量,如当前迭代的
变量。当您使用在视图构建期间运行的迭代器(如JSTL
)时,它确实可以工作。关于视图生成时间与视图渲染时间的详细解释如下:

您的问题基本上与这里详细解释的相同:它详细地概述了各种解决方案。在您的特定情况下,其中一个解决方案是使用,它支持对所有属性进行渲染时计算,以便您只需替换



以使其按预期工作

另见:

另请参见: