从 selectCheckboxMenu 中检索 class 个值

Retrieve class values from selectCheckboxMenu

我有一个 <p:selectCheckboxMenu>,我想在 bean 中取回 selected 值。但我收到的价值 当我 select 菜单中的一个项目时,它是一个字符串,代表 CategorizationBean 中的类型字段。 当我 select 来自 table 的项目时,我只想在 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;

我认为您错过了使用 beans 列表的机会,我使用了这个示例并且它有效:

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