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