required="#{variable == ''}" 仅在第二次提交时验证
required="#{variable == ''}" is only validated on second submission
我有一个具有 required="#{variable == ''}"
属性的 <p:selectOneMenu>
。
此外,在相同的表格中,我有一个 <h:commandButton>
。
第一次按下按钮时,选择字段未生效。而是在第二次提交时验证该字段并验证没有选择。
看来 required 属性中的表达式确实有效,但在第一次提交表单时从未如此。
我试过 process="@this fieldId"
但这并没有真正帮助。
有什么建议吗?
因此,您是在与一个空字符串进行比较。
required="#{variable == ''}"
如果变量实际上是 null
,这将失败,如下面的快速测试所示。
System.out.println("".equals(null)); // false
第二次验证有效只能表示该变量表示另一个输入字段的值,并且您依赖于默认 (but IMO bad) 行为,即空输入值最终为空字符串而不是模型中的空值。
基本上,你需要这个:
required="#{variable == null || variable == ''}"
但最好使用 EL empty
运算符。它将检查 nullness 和 emptiness:
required="#{empty variable}"
另请参阅:
- How does EL empty operator work in JSF?
我有一个具有 required="#{variable == ''}"
属性的 <p:selectOneMenu>
。
此外,在相同的表格中,我有一个 <h:commandButton>
。
第一次按下按钮时,选择字段未生效。而是在第二次提交时验证该字段并验证没有选择。
看来 required 属性中的表达式确实有效,但在第一次提交表单时从未如此。
我试过 process="@this fieldId"
但这并没有真正帮助。
有什么建议吗?
因此,您是在与一个空字符串进行比较。
required="#{variable == ''}"
如果变量实际上是 null
,这将失败,如下面的快速测试所示。
System.out.println("".equals(null)); // false
第二次验证有效只能表示该变量表示另一个输入字段的值,并且您依赖于默认 (but IMO bad) 行为,即空输入值最终为空字符串而不是模型中的空值。
基本上,你需要这个:
required="#{variable == null || variable == ''}"
但最好使用 EL empty
运算符。它将检查 nullness 和 emptiness:
required="#{empty variable}"
另请参阅:
- How does EL empty operator work in JSF?