0

我想做简单的下拉列表。

<p:selectOneMenu id="starter" value="#{reportRegisterManagedBean.starter}" style="width:160px" converter="#{reportStarterConverter}" required="true" requiredMessage="Select Report Starter">
                           <ui:repeat value="#{reportRegisterManagedBean.startersSelectItems}" var="dss">
                                <f:selectItem  itemLabel="#{dss}" itemValue="#{dss}" itemDescription="TEST" />
                           </ui:repeat>
                        </p:selectOneMenu>

DropDownList是 enpty,如果我使用<f:selectItems>而不是<ui:repeat>效果很好,但是<f:selectItems>Component itemDescription=(这是简单的工具提示类比)不起作用。<f:selectItem>组件itemDescription=(这是简单的工具提示类比)工作正常。这就是为什么我决定将 and<f:selectItem>与它的itemDescription属性一起使用。

4

4 回答 4

3

<f:selectItem>需要在视图构建时添加。但是,<ui:repeat>在视图渲染期间运行。您需要一个在视图构建期间运行的中继器。JSTL<c:forEach>就是这样一个。

<p:selectOneMenu ...>
    <c:forEach items="#{reportRegisterManagedBean.startersSelectItems}" var="dss">
        <f:selectItem ... />
    </c:forEach>
</p:selectOneMenu>

或者,创建自定义渲染器。这是一个完全相同的示例<p:selectManyCheckbox>Primefaces tooltip for p:selectManyCheckbox

于 2013-03-29T12:34:22.067 回答
2

因为你不喜欢 String 数组。这是用户类的测试和工作示例:

public class FilterBean {

private List<User> uList = new ArrayList<User>();
private User selectedUser = new User();


public List<User> getuList() {
    User u1 = new User();
    u1.setName("Tom");
    u1.setDesc("worker");
    User u2 = new User();
    u2.setName("Peter");
    u2.setDesc("owner");

    uList.add(u1);
    uList.add(u2);

    return uList;
}

public void setuList(List<User> uList) {
    this.uList = uList;
}   

public User getSelectedUser() {
    return selectedUser;
}

public void setSelectedUser(User selectedUser) {
    this.selectedUser = selectedUser;
}
}   

这是JSF

    <p:selectOneMenu value="#{filterBean.selectedUser}"> 
        <f:selectItem itemLabel="Select One" itemValue="" />   
        <f:selectItems  value="#{filterBean.uList}" var="n" itemValue="#{n}" itemDescription="#{n.desc}" itemLabel="#{n.name}" />  
    </p:selectOneMenu> 

这显示了 Tom 和 Peter 的 desc :)

于 2013-03-29T14:21:44.210 回答
1

以下是在 中创建下拉列表的方法primefaces

<p:selectOneMenu id="starter" value="#{reportRegisterManagedBean.starter.selectedItem}">  
        <f:selectItems value="#{reportRegisterManagedBean.starter.startersSelectItems}" />  
</p:selectOneMenu>  
于 2013-03-29T09:30:10.563 回答
1

我尝试了几个例子并得到了这个结果:

我在pojo中有这个:

private String selectL;
private String[] listas;


public String[] getListas() {
    listas = new String[2];  
    listas[0] = "pirmas";
    listas[1] = "antras";
    return listas;
}

这个 jsf 有效(itemDescription 必须是字符串):

    <p:selectOneMenu value="#{formBean.selectL}">   
        <f:selectItems  value="#{filterBean.listas}" var="n" itemDescription="#{n}2" />  
    </p:selectOneMenu>  

这不是:/:

    <p:selectOneMenu value="#{formBean.selectL}">   
        <f:selectItems  value="#{filterBean.listas}" itemDescription="test2" />  
    </p:selectOneMenu>  

编辑:

经过一些测试,我刚刚将 var 添加到第二个 selectOneMenu 中,它现在也可以工作了:

    <p:selectOneMenu value="#{formBean.selectL}">   
        <f:selectItems  value="#{filterBean.listas}" var="n" itemDescription="test2" />  
    </p:selectOneMenu>  
于 2013-03-29T10:16:26.360 回答