布尔值的 JSF 或 PrimeFaces 组件/如何将布尔值与 p:triStateCheckbox 一起使用

JSF or PrimeFaces component for Boolean / how to use Boolean with p:triStateCheckbox

PrimeFaces p:selectBooleanCheckboxp:selectBooleanButton 可以链接到控制器中的原始数据类型 boolean 变量。

我想要一个可以链接到引用数据类型的控制器 Boolean。它必须能够显示 nulltruefalse 值。

p:triStateCheckbox 可以链接到 String 变量,但不能链接到 Boolean 值。

是否有任何 JSF/PrimeFaces UI 组件可以在 Java 控制器中表示引用数据类型 Boolean

如果您想使用 TriStateCheckbox,您应该编写一个从 StringBoolean 的转换器,如 documentation:

中所述

TriStateCheckbox passes values “0”, “1”, “2” by default for each state and this can be customized using a converter.

所以,使用类似的东西:

public class TriStateBooleanConverter implements Converter {

  @Override
  public Object getAsObject(FacesContext context, UIComponent component, String value) {
    if (value == null) {
      return null;
    }
    switch (value) {
      case "0": return null;
      case "1": return Boolean.TRUE;
      case "2": return Boolean.FALSE;
      default: throw new ConverterException();
    }
  }

  @Override
  public String getAsString(FacesContext context, UIComponent component, Object value) {
    Boolean bool = (Boolean) value;
    if (bool == null) {
      return "0";
    }
    return bool ? "1" : "2";
  }

}

另请参阅:

  • Conversion Error setting value for 'null Converter' - Why do I need a Converter in JSF?