JSF设置下拉列表

JSF设置下拉列表,jsf,Jsf,我试图在JSF中创建一个下拉框。它需要在给定的有效范围内填充数字。例如,如果给定范围在5和20之间,则下拉值应为: "5, 10 15, 20" 我有一些问题,在我的控制器中,我创建了类似这样的东西,并使用for循环设置值 List<Integer> validAmounts OR List<String> validAmounts 有什么想法吗 还有更好的“JSF”方法设置有效数量,但不在我的控制器中创建for循环来设置validAmounts列表吗 “m

我试图在JSF中创建一个下拉框。它需要在给定的有效范围内填充数字。例如,如果给定范围在5和20之间,则下拉值应为:

  "5, 10 15, 20" 
我有一些问题,在我的控制器中,我创建了类似这样的东西,并使用for循环设置值

List<Integer> validAmounts  OR
List<String>  validAmounts
有什么想法吗

还有更好的“JSF”方法设置有效数量,但不在我的控制器中创建for循环来设置validAmounts列表吗

myapp:selectRowlem”很长,但它有一个下拉列表

 <h:selectOneMenu id="input" value="#{cc.attrs.item}" validatorMessage="#{msg[validatorMsgKey]}">
                            <f:validateRequired disabled="#{cc.attrs.forceRequired ne 'true'}"/>
                            <f:selectItems value="#{cc.attrs.selectItems}" var="i" itemValue="#{i.value}" itemLabel="#{i.label}" />
                        </h:selectOneMenu>

这个

<f:selectItems value="#{cc.attrs.selectItems}" var="i" itemValue="#{i.value}" itemLabel="#{i.label}" />
技术上有效的替代方法是创建一个自定义类,如
SomeObject
,这些getter方法返回所需的值。但这种车轮的再发明毕竟在功能上是简单笨拙的,因此不推荐使用


顺便说一下,这表明显然是由其他人开发的复合组件中至少存在两个问题:

  • 缺少
    shortDescription
    属性,该属性应该清楚地解释最终用户(您)确切期望的值。它应该告诉您它需要一个
    列表
    。通过这种方式,您应该在代码自动完成过程中立即注意到它,或者只需浏览一下标记文档

  • 所有这些
    var
    itemlab
    itemValue
    属性都是完全多余的。当提供
    列表时,它们都是默认值。这也表明最初的复合组件开发人员不知道他在做什么


  • 问题在于代码隐藏
    ,它不能作为标准JSF API的一部分被识别出来,因此可能是自主开发的或第三方开发的。只要你对那部分一无所知,就不可能有人能给你答案。如果我可以胡乱猜测的话,它实际上是在期待一个
    列表
    @BalusC我更新了code@BalusC我可以使用h:selectOneMenu而不是selectRowElem使它工作,但是所有的样式都正常了!有没有办法在不修改复合组件的情况下设置下拉列表的宽度?不客气。如需新问题,只需按右上角的
    Ask Question
    按钮即可。请参阅
     <h:selectOneMenu id="input" value="#{cc.attrs.item}" validatorMessage="#{msg[validatorMsgKey]}">
                                <f:validateRequired disabled="#{cc.attrs.forceRequired ne 'true'}"/>
                                <f:selectItems value="#{cc.attrs.selectItems}" var="i" itemValue="#{i.value}" itemLabel="#{i.label}" />
                            </h:selectOneMenu>
    
    <f:selectItems value="#{cc.attrs.selectItems}" var="i" itemValue="#{i.value}" itemLabel="#{i.label}" />
    
    List<SelectItem> validAmounts; 
    
    // ...
    
    validAmounts = new ArrayList<SelectItem>();
    validAmounts.add(new SelectItem(5));
    validAmounts.add(new SelectItem(10));
    validAmounts.add(new SelectItem(15));
    validAmounts.add(new SelectItem(20));