属性" var"根据TLD标记selectItems无效

时间:2016-07-15 07:14:14

标签: jsf

我正在使用h:selectOneMenu并希望为其设置labelvalue,然后UI选项列表将显示label并且在我的Bean中可以获得所选value。我有这个代码正常工作:

<h:selectOneMenu value="#{myBean.selected}">
    <f:selectItems value="#{myBean.myList}"/>
</h:selectOneMenu>

但是当我尝试通过添加以下代码添加var来设置labelvalue时会出现问题:

<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;那么我还有其他办法吗?

由于

1 个答案:

答案 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>,您需要确保以下内容:

  • 您正在使用JSF 2.x而不是JSF 1.x。
  • 您正在使用Facelets而不是JSP。

如果您无法升级/迁移,那么您需要回退到支持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}" />

另见: