【问题标题】:Problem with Java Faces and h:selectOneMenuJava Faces 和 h:selectOneMenu 的问题
【发布时间】:2011-07-28 22:15:03
【问题描述】:

我有一个包含三个组合的模态表单:

<h:panelGrid columns="3" id="parameterLabels" >
    <h:outputText id="lblCdrType" styleClass="formLabel" value="#{BRulesConfig.lblParameter307}:" />
    <h:selectOneMenu id="cmdCdrType" style="font-family:Verdana, Arial, Helvetica, sans-serif ;font-size: 14px; width:240px ;"
                     value="#{BRulesConfig.cdrType}" >
        <f:selectItem itemValue="-1" itemLabel="-Select One-" itemDisabled="true"/>
        <f:selectItems id="lstCdrType" value="#{BRulesConfig.cdrTypeList}" />
        <a4j:support event="onchange" action="#{BRulesConfig.changeStatus}"
                     reRender="parameterValuesPanelTypeModule,parameterValuesPanelFields,pnlValuesPar,formMessage,formErrMessage,formErrorNew,formInfoNew"
                     ajaxSingle="true" status="idLoading" />
    </h:selectOneMenu>
</h:panelGrid>

<h:panelGrid columns="2" id="parameterValuesPanelTypeModule"  >
    <h:outputText id="lblCdrTypeModule" styleClass="formLabel" value="#{BRulesConfig.lblParameter307_output}:" />
    <h:selectOneMenu id="cmdCdrTypeModule" style="font-family:Verdana, Arial, Helvetica, sans-serif ;font-size: 14px; width:240px ;"
                     value="#{BRulesConfig.parameterValueBean.id_output}"  >
        <f:selectItem itemValue="-1" itemLabel="-Select One-" itemDisabled="true"/>
        <f:selectItems id="lstCdrTypeModule" value="#{BRulesConfig.cdrTypeModules}" />
        <a4j:support event="onchange" ajaxSingle="true" status="idLoading" />
    </h:selectOneMenu>
</h:panelGrid>

<h:panelGrid columns="2" id="parameterValuesPanelFields"  >
    <h:outputText id="lblCdrTypeModuleField" styleClass="formLabel" value="#{BRulesConfig.lblParameter307_field}: #{BRulesConfig.parameterValueBean.value}" />
    <h:selectOneMenu id="cmdCdrTypeModuleField" style="font-family:Verdana, Arial, Helvetica, sans-serif ;font-size: 14px; width:240px ;"
                     value="#{BRulesConfig.parameterValueBean.value}">
        <f:selectItem itemValue="-1" itemLabel="-Select One-" itemDisabled="true"/>
        <f:selectItems id="lstCdrTypeModuleField" value="#{BRulesConfig.cdrTypeModulesField}" />
    </h:selectOneMenu>                                                                          
</h:panelGrid>

一切都很好,正在完美加载。

第一个组合 cmdCdrType 使用 ajax 加载第二个组合框 cmdCdrTypeModule。它使用 onchange 事件 (a4j:support) 来实现。第三个组合框也是如此:cmdCdrTypeModule

我使用这些组合都没有任何问题。但是,当我尝试保存已存储的所有信息时,我收到 Faces 发送的以下错误消息:

28-jul-2011 18:04:51 com.sun.faces.lifecycle.RenderResponsePhase execute
INFO: WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.
sourceId=frm307:cmdCdrTypeModuleField[severity=(ERROR 2), summary=(frm307:cmdCdrTypeModuleField: Error de Validación: Valor no es correcto.), detail=(frm307:cmdCdrTypeModuleField: Error de Validación: Valor no es correcto.)]

翻译最后一行:

Error de Validacion :Valor no es Correcto 
Validation Error: Value is not valid

我尝试使用转换器类,但显示相同的错误。我尝试更改我的 bean setter,但没有任何变化。我的面孔配置如下所示:

<managed-bean>
    <managed-bean-name>BRulesConfig</managed-bean-name>
    <managed-bean-class>com.tsb.mediation.brules.configuration.BRulesConfigurationControl</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

我不知道为什么会收到此错误。任何帮助表示赞赏。

【问题讨论】:

    标签: java jsf richfaces


    【解决方案1】:

    验证错误:值不正确——不是转换器错误,而是验证器错误。您是否在下拉列表中使用自定义对象?如果是,那么您需要在自定义对象上覆盖 equals() 和 hashCode()。

    【讨论】:

    • 我不使用自定义对象。我使用 SelectItem 类。
    【解决方案2】:

    在表单提交请求的应用请求值阶段,JSF 将从 bean 重新获取选择项的列表,以将选择的值与列表进行比较,以防止服务器端进行欺骗/篡改提交。如果equals()中没有一项被选中值,那么你会得到这个错误。

    看起来 bean 是请求范围的和/或您在 getter 中做生意。您需要将 bean 放在视图范围内(或者当您使用 JSF 1.x 时,bean 上的 &lt;a4j:keepAlive&gt;)并将所有业务逻辑移到 getter 之外以使其正常工作。

    【讨论】:

    • 我喜欢你的回答。与其他人发送电子邮件时,他们的 selectOneMenu 组件也存在同样的问题。他们建议我改用richcombobox 组件,它工作得很好。非常感谢!!
    猜你喜欢
    • 2014-06-14
    • 1970-01-01
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 2014-06-05
    • 2014-05-10
    • 2016-02-13
    • 2011-11-21
    相关资源
    最近更新 更多