如何在UISelectItems实例中以编程方式设置<f:selectitems var =“”> </f:selectitems>

时间:2015-02-18 09:56:21

标签: jsf jsf-2.2

我已经在所有JSP中用<s:selectItems>(Faces)成功替换了<f:selectItems>(Seam)。但我也有一些使用对象模型的Java类,我似乎有一个未解决的问题:UISelectItems#setVar(String)似乎不存在。

如何修复以下代码段?

ValueExpression labelExpr = expFactory.createValueExpression(elContext, "#{item.findLabel()}", String.class);

UISelectItems selectItems = new UISelectItems();
selectItems.setVar("item"); // FIXME: missing method
selectItems.setValue(new ArrayList<Element>(elements));
selectItems.setValueExpression("itemLabel", labelExpr);
return selectItems;

JSF代码<f:selectItems value="#{items}" var="item" itemLabel="#{item.findLabel()}" />支持var

1 个答案:

答案 0 :(得分:4)

如果某个属性似乎没有明确的getter / setter,那么只需将其直接放在UIComponent#getAttributes()可用的属性映射中。

selectItems.getAttributes().put("var", "item");

或者,如果它代表一个值表达式,那么请改用UIComponent#setValueExpression()(顺便说一下,它不适用于var属性。)


对具体问题

无关,您还希望将特定于视图的代码从Java(模型)迁移到XHTML(视图)。 JSF2中没有没有这在XHTML中是不可能的,只有在Java中才有可能。在XHTML中声明/定义/创建视图比在Java中这样做更加维护。