无法访问直通属性的 f:selectItems 变量

Cannot access f:selectItems variable for passthrough attribute

我正在使用 JSF 2.2,我想在由 h:selectOneMenu 生成的每个 option 元素上显示一个 title 属性,通过 passthrough使用 f:selectItems 变量的属性。

我似乎无法访问 f:selectItems 变量来自定义我的 passthrough 属性

这是我到目前为止所做的

我要显示的实体

public class ItemBean {
    private int id;
    private String strName;
    private String strDescription;

    public ItemBean(int id, String strName, String strDescription) {
        this.id = id;
        this.strName = strName;
        this.strDescription = strDescription;
    }

    // Getters and Setters
}

我用来检索实体列表的 backbean 方法

public List<ItemBean> getItems() {
    return new ArrayList<ItemBean>(){
        {
            add(new ItemBean(1, "Java", "Java programming language"));
            add(new ItemBean(2, "PHP", "Yet another language"));
            add(new ItemBean(3, "Python", "Not a snake at all"));
        }
    };
}

我的h:selectOneMenu在视图中

<h:selectOneMenu>
    <f:selectItems value="#{bean.items}" var="item"
                           itemValue="#{item.id}"
                           itemLabel="#{item.strName}"
                           p:title="Description : #{item.strDescription}"/>
</h:selectOneMenu>

问题是我无法访问 p:titleitem 变量,那里的输出只是空的。

这是生成的代码

<select>
    <option title="Description : " value="1">Java</option>
    <option title="Description : " value="2">PHP</option>
    <option title="Description : " value="3">Python</option>
</select>

是否可以这样做,或者有其他方法吗?

我终于使用 jstl c:forEach 循环和 f:selectItem 从此 post

找到了解决问题的方法

代码如下:

<h:selectOneMenu>
    <c:forEach items="#{bean.items}" var="item">
        <f:selectItem itemValue="#{item.id}"
                      itemLabel="#{item.strName}"
                      p:title="Description : #{item.strDescription}"/>
    </c:forEach>
</h:selectOneMenu>