JSF2 selectOneMenu中的项目标签

时间:2012-01-23 08:58:18

标签: jsf-2 selectonemenu

我在JSF 2应用程序中使用selectOneMenu,允许用户选择一个月中的某一天。出于某种原因,我无法获得标签,“选择日”出现。这就是我在做的事情:

<h:selectOneMenu id="startDay" value="#{bean.day}">       
    <f:selectItem itemLabel="Select Day" itemValue=""/>
    <f:selectItems value="#{bean.days}"/>
</h:selectOneMenu>

bean中的代码是这样的:

private int day;
private List<Integer>days;

我在@PostConstruct init方法中进行实例化:

days = new LinkedList<Integer>();
for(int i=1; i<=31; i++) {
    days.add(i);            
}

一切正常,但值显示在“1”而不是“选择日”。我在上面的标签上尝试了不同的变化但没有任何效果。我错过了什么?

编辑:我也有一个显示年份的类似小部件,它以相同的方式初始化,但是从2012年开始循环。像这样:

years = new LinkedList<Integer>();
for(int i=2012; i<=2020; i++) {
    years.add(i);           
}

这很好用,按预期显示“选择年份”。实例化循环从1开始的问题是什么?如果是这样,那么解决方法是什么?

1 个答案:

答案 0 :(得分:1)

到目前为止,您的代码看起来很好。如果您已使用项目值预先初始化<h:selectOneMenu value>,则会出现您所描述的“问题”。在您的情况下,您很可能已在真实代码中的某处将day的值设置为1。例如,

private int day = 1; // Instead of default 0.

public Bean() {
    setDay(1);
}

等等。


更新:根据您的评论:

  

我是这样做的,因为我正在使用该页面进行编辑和进入新的拍卖,我想确保当回到页面进入新的拍卖时,一旦另一次拍卖被编辑,我们删除已编辑的拍卖值。但除此之外,我会弄清楚如何处理它。

将bean放在视图范围而不是会话范围中。会话范围是输入表单的错误范围。它应仅用于会话特定数据,例如登录用户,其首选项等。另请参阅Communication in JSF2 - Managed bean scopes