我已经在所有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
。
答案 0 :(得分:4)
如果某个属性似乎没有明确的getter / setter,那么只需将其直接放在UIComponent#getAttributes()
可用的属性映射中。
selectItems.getAttributes().put("var", "item");
或者,如果它代表一个值表达式,那么请改用UIComponent#setValueExpression()
(顺便说一下,它不适用于var
属性。)
无关,您还希望将特定于视图的代码从Java(模型)迁移到XHTML(视图)。 JSF2中没有没有这在XHTML中是不可能的,只有在Java中才有可能。在XHTML中声明/定义/创建视图比在Java中这样做更加维护。