JSF转换器没有为selectOneMenu中的空字符串调用



以下示例:

<h:selectOneMenu value="#{bean.value}">
    <f:selectItem itemValue="#{null}" itemDisabled="#{true}" noSelectOption="#{true}" itemLabel="choose one" />
    <f:selectItem itemValue="FEMALE" itemLabel="female" />
    <f:selectItem itemValue="MALE" itemLabel="male" />
    <f:converter converterId="myConverter" />
</h:selectOneMenu>

在初始加载时,bean的值为null,因此选择了please select选项。如果用户什么都不选择,浏览器将不会提交一个值(所选选项被禁用),JSF将把该值设置为一个空字符串。如果页面再次呈现,则没有相应的值,JSF将不会呈现选定的属性,大多数浏览器将预选第一个未禁用的值。令人不快的

我想我可以用一个转换器很容易地改变这一点,它将空字符串转换为null在CCD_ 3中。但在这种情况下,转换器不会被调用。

有人知道为什么吗?

我知道我可以用javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL改变这种行为但这导致了其他领域的其他问题。

我通过手动设置所选属性解决了问题:

<f:selectItem itemValue="#{null}" itemDisabled="#{true}" noSelectOption="#{true}" itemLabel="choose one" />
  <f:passThroughAttributes value="#{bean.attributes}" />
</f:selectItem>
public Map<String, String> getAttributes() {
    Map<String, String> attributes = new HashMap<>();
        if (value == null || "".equals(value)) {
           attributes.put("selected", "selected");
        }
    }   
    return attributes;
}

相关内容

  • 没有找到相关文章

最新更新