[英]jsf selectOneMenu strange itemValue
In my app I have selectOneMenu to select month. 在我的应用程序中,我具有selectOneMenu选择月份。
<h:selectOneMenu value="#{register.monthOfBirth}">
<f:selectItems value="#{register.dateValues.monthsList}" var="month" itemLabel="#{month.valueLabel}" itemValue="#{month.valueValue}"/>
<f:ajax listener="#{register.monthChanged}" render="messages" />
</h:selectOneMenu>
Here's my DateValues class which I use to populate selectOneMenu's: 这是我的DateValues类,用于填充selectOneMenu的类:
public class DateValues {
public static class Values{
public String valueLabel;
public String valueValue;
public Values(String valueLabel, String valueValue){
this.valueLabel = valueValue;
this.valueLabel = valueValue;
}
public String getValueLabel(){
return valueLabel;
}
public String getValueValue(){
return valueValue;
}
}
public Values[] daysList;
public Values[] monthsList;
public Values[] yearsList;
public DateValues(){
daysList = new Values[31];
for(int i=0;i<31;i++){
daysList[i] = new Values(""+ (i+1),""+(i+1));
}
monthsList = new Values[12];
for(int i=0;i<12;i++){
monthsList[i] = new Values("" + (i+1),"" + (i+1));
}
yearsList = new Values[109];
Calendar cal = Calendar.getInstance();
int currentYear = cal.get(Calendar.YEAR);
int first = currentYear - 108;
for(int i=0;i<109;i++) {
yearsList[i] = new Values("" + (first + (108-i)),"" + (first + (108-i)));
}
}
public Values[] getDaysList() {
return daysList;
}
public Values[] getMonthsList() {
return monthsList;
}
public Values[] getYearsList() {
return yearsList;
}
}
In the @ManagedBean I've got an ajax listener: 在@ManagedBean中,我有一个ajax侦听器:
public void monthChanged(){
System.out.println("New month is month number " + monthOfBirth);
}
What I get in the output is: 我在输出中得到的是:
"INFO: New month is month number dyplom.dyplom.date.DateValues$Values@79f6099"
instead of (for example) 2 (number of month, so February) 而不是(例如)2(月数,所以2月)
What did I do wrong? 我做错了什么?
EDIT: 编辑:
GENERATED HTML: 生成的HTML:
<h2><select id="j_idt56:j_idt70" name="j_idt56:j_idt70" size="1" onchange="mojarra.ab(this,event,'valueChange',0,'j_idt56:messages')"> <option value="dyplom.dyplom.date.DateValues$Values@32b0c37e">1</option>
<option value="dyplom.dyplom.date.DateValues$Values@72f29f31">2</option>
<option value="dyplom.dyplom.date.DateValues$Values@16b184ec">3</option>
<option value="dyplom.dyplom.date.DateValues$Values@608dad97">4</option>
<option value="dyplom.dyplom.date.DateValues$Values@757fc606">5</option>
<option value="dyplom.dyplom.date.DateValues$Values@17a1f02e">6</option>
<option value="dyplom.dyplom.date.DateValues$Values@89f6821">7</option>
<option value="dyplom.dyplom.date.DateValues$Values@196d52f3">8</option>
<option value="dyplom.dyplom.date.DateValues$Values@5860dc8f">9</option>
<option value="dyplom.dyplom.date.DateValues$Values@3f305d9d">10</option>
<option value="dyplom.dyplom.date.DateValues$Values@520ed4">11</option>
<option value="dyplom.dyplom.date.DateValues$Values@b4b8076">12</option>
</select>
</h2>
Problem solved! 问题解决了!
I'm so ashamed of the mistake I made! 我为自己犯的错误感到羞耻! Take a look at the constructor of Values
: 看一下Values
的构造函数:
public Values(String valueLabel, String valueValue){
this.valueLabel = valueValue;
this.valueLabel = valueValue;
}
As you can see I've been setting up twice valueLabel with wrong variable and moreover I didn't set valueValue at all! 如您所见,我已经用错误的变量设置了两次valueLabel,而且我根本没有设置valueValue!
Now as I corrected constructor: 现在,当我更正构造函数时:
public Values(String valueLabel, String valueValue){
this.valueLabel = valueLabel;
this.valueValue = valueValue;
}
everything is alright :) Sorry for the mess! 一切都很好:)对不起,一团糟!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.