0

我在 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 初始化方法中实例化:

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 开始的实例化循环是否存在问题?如果是这样,解决方法是什么?

4

1 回答 1

1

到目前为止,您的代码看起来还不错。<h:selectOneMenu value>如果您已完全使用 item 值预初始化,则会出现您所描述的“问题” 。在您的情况下,很可能您已将值设置为实际代码中day1某个位置。例如,

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

或者

public Bean() {
    setDay(1);
}

等等。


更新:根据您的评论:

我之所以这样做是因为我同时使用该页面进行编辑和进入新的拍卖,并且我想确保在返回页面进入新的拍卖时,一旦编辑了另一个拍卖,我们就会删除已编辑的拍卖的价值。但除此之外,我会弄清楚如何处理它。

将 bean 放在视图范围而不是会话范围中。会话范围是输入表单的错误范围。它应该仅用于会话特定数据,例如登录用户、其偏好等。另请参阅JSF2 托管 bean 范围中的通信

于 2012-01-23T16:37:39.930 回答