在boolean和String之间转换h:selectBooleanCheckbox值

时间:2011-06-15 11:17:43

标签: jsf converter selectbooleancheckbox

我有一个包含字段creditCard的支持bean,它可以从DB填充两个字符串值yn。我想在复选框中显示此内容,以便将yn转换为boolean

我该如何实施?我无法使用自定义转换器,getAsString()在呈现响应时返回String,而我需要boolean

3 个答案:

答案 0 :(得分:19)

<h:selectBooleanCheckbox>组件不支持自定义转换器。该物业必须是boolean。周期。

你可以做的最好的事情是在持久层中进行转换,或者添加额外的布尔getter / setter来装饰原始y / n getter / setter或者只是替换旧的getter / setter一起。 E.g。

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";
}

然后在<h:selectBooleanCheckbox>中使用它。

<h:selectBooleanCheckbox value="#{bean.useCreditcard}" />

答案 1 :(得分:0)

我有类似的问题,我同意上一篇文章,你应该在持久层中处理这个问题。 但是,还有其他解决方案。我的问题是下一个:我在数据库中有TINYINT列,表示布尔值为true或false(0 = false,1 = true)。所以,我想在我的JSF应用程序中显示它们并将其作为布尔值处理。不幸的是,这不太可能,或者我没有找到合适的方法。但是使用复选框,我的解决方案是使用selectOneMeny并将这些值转换为&#34;是&#34;或&#34;否&#34;。这是代码,所以有类似问题的人可以使用它。

转换器:

@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, UIComponent component, 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中,我创建了一个包含可能值的列表(&#34;是&#34;和&#34;否&#34;)

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");
}

enter image description here

答案 2 :(得分:0)

您可以将BooleanConverter用于java原语,这会将文本解析为您的managedbean中的boolean,here只需在您的.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;
    }      

}