JSF必需=是不在数据表中工作?

时间:2011-08-25 23:47:43

标签: jsf java-ee validation customvalidator requiredfieldvalidator

我到处搜索但找不到解决方法。我想用 required = yes以验证值是否存在。我在inputtext中使用它。 问题是它在数据表中不起作用。如果我把文本框放在数据表之外就可以了。我使用的是JSF 1.7,因此我没有来自JSF 2.0的validateRequired标记。

我甚至使用了验证器类,但它仍然无效。有没有人知道为什么在数据表中的inputtext内的required = yes或validator ='validationClass'不起作用。

我很感激帮助。

感谢。

1 个答案:

答案 0 :(得分:2)

首先,required属性的正确属性值是布尔值truefalse,而不是字符串值Yes。它是一个接受布尔表达式的属性。

以下是正确的用法示例:

<h:inputText required="true" />
<h:inputText required="#{bean.booleanValue}" />
<h:inputText required="#{bean.stringValue == 'Yes'}" />

关于它在<h:dataTable>内不起作用的问题,当数据模型没有被正确保存时可能会发生这种情况(数据模型是表在value属性中检索的任何内容)。这可能反过来发生在托管bean是请求范围并且在其(post)构造期间没有准备数据模型时导致数据模型为null或为空而JSF即将收集,转换和验证提交的值。

您需要确保在表单提交请求的应用请求值阶段期间数据模型完全相同,就像在初始请求的呈现响应阶段期间一样,以显示带有表的表单。一个简单的快速测试是将bean放在会话范围内。如果这解决了问题,那么你肯定需要重写数据模型保留逻辑。您还可以使用Tomahawk的<t:saveState><t:dataTable preserveDataModel="true">将数据模型存储在视图范围内(就像JSF2的新视图范围一样)。

最后,JSF 1.7不存在。也许你的意思是JSF 1.2?