从selectCheckboxMenu中检索类值

时间:2015-02-25 12:00:56

标签: jsf primefaces

我有一个<p:selectCheckboxMenu>,我希望在bean中获取所选的值。但是我收到的价值 当我从菜单中选择一个项目时,它是一个字符串,代表CategorizationBean中的类型字段。 我只是想从表中选择一个项目,以获得bean中的整个CategorizationBean结构。

这是xhtml页面的片段:

<p:selectCheckboxMenu label="Categorization"  
                      value="#alertMB.selectedCategories}" 
                      converter="com.converter.CategoryConverter">

    <f:selectItems value="#{alertMB.categoryDomainEntry}"
                   var="category"
                   itemLabel="#{category.type}"
                   itemValue="#{category}"/> 
</p:selectCheckboxMenu>

来自bean的片段:

public List<CategorizationBean> getSelectedCategories() {
        return selectedCategories;
}

public void setSelectedCategories(List<CategorizationBean> selectedCategories) {
    this.selectedCategories = selectedCategories;
}

public class CategorizationBean implements Serializable{
    private String type;
    private long id;

1 个答案:

答案 0 :(得分:2)

我认为你错过了使用bean列表,我使用这个例子并且它可以工作:

<p:selectCheckboxMenu id="slctRdBtn"
                                value="#{yourBean.compLovDtgrid}"
                                converter="compLovDtgridConverter">
                                <f:selectItems
                                    value="#{yourBean.listCompLovDtgrid}"
                                    var="rdbtn" itemLabel="#{rdbtn.vjlrLibelleRep}"
                                    itemValue="#{rdbtn}" />
                            </p:selectCheckboxMenu>

和转换器:

@FacesConverter(forClass=CompLovDtgrid.class , value="compLovDtgridConverter")
public class CompLovDtgridConverter implements Converter{
@Override
public String getAsString(FacesContext context, UIComponent component, Object value)
{
    return (value instanceof CompLovDtgrid) ? ((CompLovDtgrid) value).getVjlrCodeRep() : null;
}
@Override
public Object getAsObject(FacesContext context, UIComponent component,String value)
{
    if(value == null)
        return null;

    YourBean data = context.getApplication().evaluateExpressionGet(context, "#{yourBean}", YourBean.class);

    for(CompLovDtgrid compLovDtgrid : data.getListCompLovDtgrid())
    {
        if(compLovDtgrid.getVjlrCodeRep().equals(value))
            return compLovDtgrid;
    }

    throw new ConverterException(new FacesMessage(String.format("Cannot convert %s to CompLovDtgrid", value)));
}

}

对于列表,我使用:

public List<CompLovDtgrid> getListCompLovDtgrid() 
    {
        return listCompLovDtgrid;
    }

    public void setListCompLovDtgrid(List<CompLovDtgrid> listCompLovDtgrid) {
        this.listCompLovDtgrid = listCompLovDtgrid;
    }