3

我有一个支持 bean,其中包含一个creditCard可以有两个字符串值yn从数据库填充的字段。我想在复选框中显示它,以便y转换nboolean.

我该如何实施?在呈现响应时,我不能使用自定义转换器作为getAsString()返回String,而我需要一个boolean.

4

3 回答 3

21

<h:selectBooleanCheckbox>组件不支持自定义转换器。该属性必须是boolean. 时期。

您可以做的最好的事情是在持久层中进行转换,或者添加额外的布尔 getter/setter 来装饰原始y/ ngetter/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";
}

然后改用它<h:selectBooleanCheckbox>

<h:selectBooleanCheckbox value="#{bean.useCreditcard}" />
于 2011-06-15T11:25:56.010 回答
1

您可以将 BooleanConverter 用于 java 原语,这会将文本解析为 managedbean 中的布尔值,在这里 只需将您的代码像这样放在 .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(name="yourMB")
@ViewScoped
public class YourMB implements Serializable {

       private boolean booleanproperty;


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

}    
于 2016-08-25T22:25:59.393 回答
0

我有类似的问题,我同意以前的帖子,你应该在持久层处理这个问题。但是,还有其他解决方案。接下来是我的问题:我在数据库中有 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, 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 中,我创建了一个包含可能值的列表(“是”和“否”)

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

在此处输入图像描述

于 2014-10-14T14:12:07.890 回答