如果表单中有空required
个字段,则会阻止我通过代码设置值,并根据当前用户输入隐藏/显示其他字段。
我将我的问题分解为一个小例子:
<h:inputText label="Name" value="#{req.test}" required="true"/>
<h:inputText label="Details" value="#{req.tests2}" readonly="true" required="true"/>
<h:selectBooleanCheckbox label="Hide field" value="#{req.bool1}"/>
<ui:fragment rendered="#{not req.bool1}">
<h:inputText label="Hidden" value="#{req.test3}" required="true"/>
</ui:fragment>
我的表单中有required
个字段,但如果用户选择先设置复选框,我希望即使验证失败也会显示隐藏字段。我希望字段被标记为无效,因此我无法立即使用。
问题在于,在处理验证时,在jsf生命周期中调用 renderResponse 。因此,跳过了更新模型值阶段,我无法对用户输入作出反应。
除此之外:如果我填写所有required
字段并选中复选框(表单有效)并取消选中复选框(出现required
字段"Hidden"
), 无法只需选中复选框即可使"Hidden"
再次消失,因为"Hidden"
不能为required
字段为空。 即使我说required="#{not req.bool1}"
它也不起作用,因为复选框值永远不会到达我的模型,因为跳过了更新模型值阶段。
我们现在所做的是包装faces上下文以防止在验证阶段调用renderResponse()
来设置标志。 (是的,危险的,是的,我确实需要一种更好的方法来做到这一点。)现在终于模型是最新的,但是:
必填字段仍然为空,因为由于某种原因,jsf决定required
字段不需要从我的模型中获取它们的值,只要它们是空的/无效的。
required
字段?renderResponse()
< / strong>发生了什么?答案 0 :(得分:0)
所以第一个问题的答案是:重置值和那么更新,然后我得到我的值显示在必填字段中。谢谢Vasil!
至于第二个问题:我想知道以前没有人遇到过这个问题。只有我吗?好吧,我想我没有明白这一点,并且使用生命周期错误或其他什么。但我真的认为视图应该响应用户输入,即使某些字段仍然是空的。用户仍然在插入数据,但我们还没有继续前进。在该状态下允许字段为空。 我想这就是重点,而我的“必需”意味着除了jsf“必需”之外的东西。在这方面我仍然没有得到标准的验证过程......
但我对我的问题有一个肮脏的解决方法,所以我会将问题标记为已回答。