在布尔和字符串之间转换h:selectBooleanCheckbox值

问题描述

|| 我有一个包含字段“ 0”的后备bean,该字段可以具有从数据库填充的两个字符串值“ 1”或“ 2”。我想在复选框中显示内容,以便将
y
n
转换为
boolean
。 我该如何实施?我不能使用自定义转换器,因为呈现响应时
getAsstring()
返回
String
,而我需要need5ѭ。     

解决方法

        
<h:selectBooleanCheckbox>
组件不支持自定义转换器。该财产必须是5英镑。期。 最好的办法是在持久层中进行转换,或者添加额外的布尔型getter / setter来装饰原始的
y
/
n
getter / setter或完全替换旧的getter / setter。例如。
private String useCreditcard; // I\'d rather use a char,but ala.

public boolean isUseCreditcard() {
    return \"y\".equals(useCreditcard);
}

public void setUseCreditcard(boolean useCreditcard) {
    this.useCreditcard = useCreditcard ? \"y\" : \"n\";
}
然后在ѭ9中使用它。
<h:selectBooleanCheckbox value=\"#{bean.useCreditcard}\" />
    ,        我有类似的问题,并且我同意以前的帖子,您应该在持久层中处理此问题。 但是,还有其他解决方案。接下来的问题是:数据库中有TINYINT列,它表示布尔值true或false(0 = false,1 = true)。因此,我想在JSF应用程序中将它们显示并作为布尔值处理。不幸的是,这不太可能,或者只是我没有找到合适的方法。但是我不是使用复选框,而是使用selectOneMeny并将这些值转换为\“是\”或\“否\”。这是代码,因此有类似问题的人可以使用它。 转换器:
@FacesConverter(\"booleanConverter\")

public class BooleanConverter implements Converter{

@Override
public Object getAsObject(FacesContext context,UIComponent component,String value) {

    short number= 0;

    try {
        if (value.equals(\"Yes\")) {
            number= 1;
        }
    } catch (Exception ex) {
        FacesMessage message = new FacesMessage();
        message.setSeverity(FacesMessage.SEVERITY_FATAL);
        message.setSummary(MessageSelector.getMessage(\"error\"));
        message.setDetail(MessageSelector.getMessage(\"conversion_failed\") + ex.getMessage());
        throw new ConverterException(message);
    }
    return number;
    //throw new UnsupportedOperationException(\"Not supported yet.\"); //To change body of generated methods,choose Tools | Templates.
}

@Override
public String getAsString(FacesContext context,Object value) {


    return value.toString();
    //throw new UnsupportedOperationException(\"Not supported yet.\"); //To change body of generated methods,choose Tools | Templates.
}
JSF页面:
<h:selectOneMenu id=\"selectOnePlayerSucc\" value=\"#{vezbaTrening.izvedenaUspesno}\" converter=\"booleanConverter\">
  <f:selectItems id=\"itemsPlayerSucc\" value=\"#{trainingOverview.bool}\" var=\"opt\" itemValue=\"#{opt}\" itemLabel=\"#{opt}\"></f:selectItems>
在我的ManagedBean中,我创建了一个带有可能值(\“是\”和\“否\”)的列表。
private List<String> bool;

public List<String> getBool() {
    return bool;
}

public void setBool(List<String> bool) {
    this.bool = bool;

@PostConstruct
public void init () {
    ...

    bool = new LinkedList<>();
    bool.add(\"Yes\");
    bool.add(\"No\");
}
    ,        您可以将BooleanConverter用于Java原语,这会将文本解析为托管bean中的布尔值,在这里只需将您的代码这样放在.xhtml文件中
<p:selectOneMenu id=\"id\"
                        value=\"#{yourMB.booleanproperty}\"
                        style=\"width:60px\" converter=\"javax.faces.Boolean\">
                        <p:ajax listener=\"#{yourMB.anylistener}\"
                            update=\"anyIDcontrol\" />
                        <f:selectItem itemLabel=\"------\" itemValue=\"#{null}\"
                            noSelectionOption=\"true\" />
                        <f:selectItem itemLabel=\"y\" itemValue=\"true\" />
                        <f:selectItem itemLabel=\"n\" itemValue=\"false\" />                                                
                    </p:selectOneMenu>
ManagedBean:
@ManagedBean(name=\"yourMB\")
@ViewScoped
public class YourMB implements Serializable {

       private boolean booleanproperty;


    public boolean isBooleanproperty() {
        return booleanproperty;
    }
    public void setBooleanproperty(boolean booleanproperty) {
        this.booleanproperty = booleanproperty;
    }      

}