我正在使用h:selectOneMenu并希望为其设置label
和value
,然后UI选项列表将显示label
并且在我的Bean中可以获得所选value
。我有这个代码正常工作:
<h:selectOneMenu value="#{myBean.selected}">
<f:selectItems value="#{myBean.myList}"/>
</h:selectOneMenu>
但是当我尝试通过添加以下代码添加var来设置label
和value
时会出现问题:
<h:selectOneMenu value="#{myBean.selected}">
<f:selectItems value="#{myBean.myList}" var="field"
itemLabel="#{field.label}" itemValue="#{field.value}"/>
</h:selectOneMenu>
错误显示Attribute var invalid for tag selectItems according to TLD
。
我的问题是:
我能解决这个问题吗?
如果&#34;是&#34;那么&#34;怎么&#34;?
如果&#34;否&#34;那么我还有其他办法吗?
由于
答案 0 :(得分:3)
根据TLD
,标签selectItems的属性var无效
面向Facelets的JSF 2.0中的<f:selectItems var>
属性为introduced。此错误表明您正在使用旧版JSF 1.x而不是<f:selectItems>
lacks var
属性的新版JSF 2.x,或者您正在使用旧版由于JSF 2.0并且没有获得任何新的JSF 2.0标记/属性,因此不再使用JSP而不是其后继Facelets作为JSP。确切的错误消息是由特定于JSP的术语&#34; TLD&#34;但是可以从JSP解析器中识别,这反过来证实了你实际上使用的是JSP而不是Facelets。
要使用<f:selectItems var>
,您需要确保以下内容:
如果您无法升级/迁移,那么您需要回退到支持bean的遗留SelectItem
方法。您可以将List<Field>
转换为List<SelectItem>
,如下所示:
private List<Field> fields;
private List<SelectItem> selectItems; // +getter
@PostConstruct
public void init() {
fields = yourFieldService.list();
selectItems = new ArrayList<>();
for (Field field : fields) {
selectItems.add(new SelectItem(field.getValue(), field.getLabel()));
}
}
<f:selectItems value="#{bean.selectItems}" />