2013-02-12 69 views
2

我想使用SelectItemsConverter和PrimeFaces选择列表。OmniFaces:SelectItemsConverter不与PrimeFaces一起工作:PickList

XHTML:

<p:pickList id="plUpdateFirma" value="#{bsvttController.dlmFirma}" var="plFirma" 
    itemLabel="#{plFirma.schluesselFirma}" itemValue="#{plFirma}" 
    converter="FirmaConverter"> 

    <f:facet name="sourceCaption"> 
     Vorjahr 
    </f:facet> 
    <f:facet name="targetCaption"> 
     #{bsvttController.selSaison} 
    </f:facet> 

    <p:column> 
     #{plFirma.schluesselFirma} 
    </p:column> 

</p:pickList> 

转换器:

@FacesConverter(value = "FirmaConverter") 
public class FirmaConverter extends SelectItemsConverter 
{ 

    @Override 
    public String getAsString(final FacesContext facesContext, final UIComponent component, final Object object) 
    { 
     return ((Firma) object).getSchluesselFirma(); 
    } 

} 

豆:

@ManagedBean 
@ViewScoped 
public class BsvttController implements Serializable 
{ 
    private DualListModel<Firma> dlmFirma; 
    private List<Firma> dlmFirmaSource; 
    private List<Firma> dlmFirmaTarget; 
    private Firma firma; 

    @PostConstruct 
    public void init() 
    { 
     dlmFirmaSource = FirmaPersistenz.leseFirmaAlle(); 
     dlmFirmaTarget = new ArrayList<Firma>(); 
     dlmFirma = new DualListModel<>(dlmFirmaSource, dlmFirmaTarget); 
    } 

    public DualListModel<Firma> getDlmFirma() 
    { 
     return dlmFirma; 
    } 
    public List<Firma> getDlmFirmaSource() 
    { 
     return dlmFirmaSource; 
    } 
    public List<Firma> getDlmFirmaTarget() 
    { 
     return dlmFirmaTarget; 
    } 

    public void setDlmFirma(DualListModel<Firma> dlmFirma) 
    { 
     this.dlmFirma = dlmFirma; 
    } 
    public void setDlmFirmaSource(List<Firma> dlmFirmaSource) 
    { 
     this.dlmFirmaSource = dlmFirmaSource; 
    } 
    public void setDlmFirmaTarget(List<Firma> dlmFirmaTarget) 
    { 
     this.dlmFirmaTarget = dlmFirmaTarget; 
    } 

} 

在调试器,我可以看到符getAsString方法是工作的罚款。但提交表单后,arraylist(dlmFirmaSource和dlmFirmaTarget)都是空的。

OmniFaces展示说,

“的omnifaces.SelectItemsConverter允许您填充例如使用复杂的Java模型对象下拉为f值:selectItems的和有JSF转换的自动恢复,无需提供一个可能需要根据可能昂贵的服务/ DAO操作完成工作的自定义转换器。“

但在选择列表组件的情况下,不存在任何F:selectItems标签。

SelectItemsConverter是否支持PickList组件?

回答

2

不,SelectItemsConverter处理用于各种JSF组件的核心JSF SelectItem对象的转换。

DualListModel是PrimeFaces特定的类,适用于高级PrimeFaces数据组件。当然,解决方法是可以使用@PostConstruct方法在托管bean中初始化您的DualListModel,以便它不需要转换器,也可以简单地以传统方式实现转换器。从上converter属性提货单的PrimeFaces指南:

EL表达式或限定 转换器为组件文字文本。当它是EL 表达式时,它被解析为转换器实例。 如果它是一个静态文本,它必须引用 转换器1D

+1

以防万一你寻求确认,是的maple_shaft是正确的。 ''不使用'UISelectItem(s)',所以这是故事结束。如果你真的需要,考虑一个自定义转换器,它注入持有该模型的bean。 – BalusC 2013-02-12 14:31:40

4

不SelectItemsConverter甚至支持picklist组件?

不,它没有。

由于OmniFaces 1.5,您可以使用omnifaces.ListConverteromnifaces.ListIndexConverter为所需的目的。另请参阅the ListConverter showcase example,其中还演示了<p:pickList>上的用法。

+0

我正在使用Omnifaces 1.8.1并添加了此转换器里面的picklist标签,但没有找到”list“属性 您可以请指教? – 2014-08-03 19:32:38

+2

@ Samy:这是一个动态属性,只需指定它。如果IDE是抽搐,忽略它。 – BalusC 2014-08-03 19:58:37