我到处找,但找不到解决办法。我在尝试使用Required =yes用于验证值是否存在。我在inputtext中使用它。问题是它不能在数据表中工作。如果我把文本框放在数据表之外,它就可以工作了。我使用的是JSF 1.7,所以我没有JSF 2.0中的validaterrequired标签。
我甚至使用了一个验证器类,但它仍然不能工作。有没有人知道为什么需要=yes或validator='validationClass'在一个数据表内的输入文本不工作。
我很感激你的帮助。谢谢。
首先,required
属性的合适属性值是布尔值true
或false
,而不是字符串值Yes
。它是一个接受布尔表达式的属性。
以下是正确的用法示例:
<h:inputText required="true" />
<h:inputText required="#{bean.booleanValue}" />
<h:inputText required="#{bean.stringValue == 'Yes'}" />
至于它不能在<h:dataTable>
中工作的问题,这可能发生在数据模型没有被正确保存的情况下(数据模型是表在其value
属性中检索到的任何数据)。当托管bean在请求范围内并且在其(后)构造期间没有准备数据模型时,可能会发生这种情况,这导致数据模型为null
或空,而JSF即将收集、转换和验证提交的值。
您需要确保表单提交请求的应用请求值阶段的数据模型与显示表单表的初始请求的呈现响应阶段的数据模型完全相同。一个简单的快速测试是将bean放在会话作用域中。如果这样可以解决问题,那么您肯定需要重写数据模型保存逻辑。您还可以使用Tomahawk的<t:saveState>
或<t:dataTable preserveDataModel="true">
将数据模型存储在视图范围中(就像JSF2的新视图范围所做的那样)。
最后,JSF 1.7还不存在。也许您指的是JSF 1.2?