我有一个包含三个组合的模态表单:
<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加载第二个combox 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设置器,但没有任何变化。我的面部配置看起来像这样:
<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>
我不知道为什么我收到这个错误。任何帮助表示赞赏。
答案 0 :(得分:2)
验证错误:值不正确 - 不是转换器错误,而是验证器错误。您是否在下拉列表中使用自定义对象?如果是,那么您需要覆盖自定义对象上的equals()和hashCode()。
答案 1 :(得分:0)
在表单提交请求的应用请求值阶段,JSF将重新获取bean中的选择项列表,以将所选值与列表进行比较,以防止服务器端遭受欺骗/篡改提交。如果项equals()
中没有任何一个选定的值,那么您将收到此错误。
看起来bean是请求作用域和/或你在getter中做生意。您需要将bean放在视图范围内(或者当您使用JSF 1.x时,bean上的<a4j:keepAlive>
)并将所有业务逻辑移到getter之外以使其正常工作。