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?