如何以编程方式在 UISelectItems 实例中设置 <f:selectItems var>

How to programmatically set <f:selectItems var> in UISelectItems instance

我已经成功地将我所有 JSP 中的 <s:selectItems>(Seam)替换为 <f:selectItems>(Faces)。但我也有一些 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

如果某个属性似乎没有明确的 getter/setter,则只需将其直接放入 UIComponent#getAttributes() 可用的属性图中即可。

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

或者,如果它表示一个值表达式,则使用 UIComponent#setValueExpression() 代替(顺便说一下,这不适用于 var 属性)。


与具体问题无关,您还想将特定于视图的代码从 Java(模型)迁移到 XHTML(视图) . JSF2 nothing 在 XHTML 中是不可能的,只有在 Java 中才有可能。 Declaring/defining/creating XHTML 中的视图比 Java 中的视图更易于维护。