Ajax jsf selectOneMenu奇怪项值

Ajax jsf selectOneMenu奇怪项值,ajax,jakarta-ee,web-applications,jsf-2,selectonemenu,Ajax,Jakarta Ee,Web Applications,Jsf 2,Selectonemenu,在我的应用程序中,我选择了一个菜单来选择月份 <h:selectOneMenu value="#{register.monthOfBirth}"> <f:selectItems value="#{register.dateValues.monthsList}" var="month" itemLabel="#{month.valueLabel}" itemValue="#{month.val

在我的应用程序中,我选择了一个菜单来选择月份

                    <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>
我在输出中得到的是:

    "INFO: New month is month number dyplom.dyplom.date.DateValues$Values@79f6099"
而不是(例如)2(月数,所以是2月)

我做错了什么

编辑:

生成的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>
1
2.
3.
4.
5.
6.
7.
8.
9
10
11
12
问题已解决
我为我犯的错误感到羞愧! 看看
值的构造函数

public Values(String valueLabel, String valueValue){
    this.valueLabel = valueValue;
    this.valueLabel = valueValue;
}
正如您所看到的,我用错误的变量设置了两次valueLabel,而且我根本没有设置valueValue

现在,正如我纠正的那样:

public Values(String valueLabel, String valueValue){
    this.valueLabel = valueLabel;
    this.valueValue = valueValue;
}
一切都好:) 抱歉弄得一团糟

问题解决了
我为我犯的错误感到羞愧! 看看
值的构造函数

public Values(String valueLabel, String valueValue){
    this.valueLabel = valueValue;
    this.valueLabel = valueValue;
}
正如您所看到的,我用错误的变量设置了两次valueLabel,而且我根本没有设置valueValue

现在,正如我纠正的那样:

public Values(String valueLabel, String valueValue){
    this.valueLabel = valueLabel;
    this.valueValue = valueValue;
}
一切都好:)
抱歉弄得一团糟

你能展示整个代码吗?其中的变量名为
monthOfBirth
?您的
itemValue
类型为
String
,因此
monthOfBirth
应为
String
。是否正确执行
到String()。因为这里的问题是,您正在尝试将对象打印为字符串,如果您没有重写
toString()
,则会得到默认结果(即显示的结果)。@SJuan76我是否只需要在“值”中重写toString()?或者我应该实现一个转换器?我希望当selectOneMenu的“itemValue”和“value”都是同一类型(字符串)时,不需要任何其他操作。您确定
{register.monthOfBirth}
是字符串吗?我假设它是一个
;如果是字符串,我希望它可以正常工作。在这种情况下,您是否可以检查生成的HTML以查找其中使用了哪些值?您确定正在运行您认为正在运行的代码?重建/重新部署/重新启动以确保。您能显示整个代码吗?其中的变量名为
monthOfBirth
?您的
itemValue
类型为
String
,因此
monthOfBirth
应为
String
。是否正确执行
到String()
。因为这里的问题是,您正在尝试将对象打印为字符串,如果您没有重写
toString()
,则会得到默认结果(即显示的结果)。@SJuan76我是否只需要在“值”中重写toString()?或者我应该实现一个转换器?我希望当selectOneMenu的“itemValue”和“value”都是同一类型(字符串)时,不需要任何其他操作。您确定
{register.monthOfBirth}
是字符串吗?我假设它是一个
;如果是字符串,我希望它可以正常工作。在这种情况下,您是否可以检查生成的HTML以查找其中使用了哪些值?您确定正在运行您认为正在运行的代码?重建/重新部署/重新启动以确保安全。