我有一个具有required="#{variable == ''}"
属性的<p:selectOneMenu>
。此外,在同样的形式下,我有一个<h:commandButton>
。
第一次按下按钮时,选择字段未被验证。相反,在第二次提交时验证该字段,并验证没有选择。
因此,required属性中的表达式似乎起作用了,但在第一次提交表单时却不起作用。
我尝试了process="@this fieldId"
,但这并没有真正的帮助。有什么建议吗?
这样就比较了一个空字符串。
required="#{variable == ''}"
如果变量实际上是null
,这将失败,如下面的快速测试所示。
System.out.println("".equals(null)); // false
第二个验证通过工作只能意味着变量表示另一个输入字段的值,并且您依赖于默认(但IMO不好)的行为,即空输入值最终作为空字符串而不是模型中的null。
基本上,你需要这个:
required="#{variable == null || variable == ''}"
但最好使用EL empty
运算符。它将检查null和空值:
required="#{empty variable}"
参见:
- EL空操作符如何在JSF中工作?