我有一个<p:selectOneMenu>
属性required="#{variable == ''}"
。
此外,在同一表格中,我有一个<h:commandButton>
。
第一次按下按钮时,不验证选择字段。而是在第二次提交时验证该字段并验证没有选择。
所以似乎所需属性中的表达式确实有效,但从不首次提交表单。
我尝试使用process="@this fieldId"
,但这并没有真正帮助。
有什么建议吗?
答案 0 :(得分:1)
因此,您将与空字符串进行比较。
required="#{variable == ''}"
如果变量实际为null
,则会失败,如下面的快速测试所示。
System.out.println("".equals(null)); // false
第二个验证传递有效只能意味着变量代表另一个输入字段的值,并且您依赖于默认(but IMO bad)行为,即空输入值最终为空字符串而不是空字符串模特。
基本上,你需要这个:
required="#{variable == null || variable == ''}"
但最好使用EL empty
运算符。它将检查无效和空虚:
required="#{empty variable}"