JSF <ui:repeat>组件</ui:repeat>

时间:2013-03-29 09:08:04

标签: java jsf-2 primefaces

我想制作简单的DropDownList。

<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很简单,如果我使用<f:selectItems>代替<ui:repeat>效果很好,但是<f:selectItems>组件itemDescription =(这是简单的工具提示类比)不工作<f:selectItem>组件itemDescription =(这是简单的工具提示类比)工作正常。这就是我决定使用<f:selectItem>及其itemDescription属性的原因。

4 个答案:

答案 0 :(得分:2)

在视图构建期间需要添加<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

完全相同的示例

答案 1 :(得分: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> 

这显示了汤姆和彼得的说法:)

答案 2 :(得分:1)

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

<p:selectOneMenu id="starter" value="#{reportRegisterManagedBean.starter.selectedItem}">  
        <f:selectItems value="#{reportRegisterManagedBean.starter.startersSelectItems}" />  
</p:selectOneMenu>  

答案 3 :(得分: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必须是String):

    <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>