Проблема с Java Faces и h: selectOneMenu - PullRequest
1 голос
/ 29 июля 2011

У меня есть модальная форма с тремя комбинациями:

<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

Я пытался использоватькласс конвертера, но отображается та же ошибка.Я попытался изменить мои сеттеры, но ничего не изменилось.Конфигурация моих лиц выглядит следующим образом:

<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>

Я не знаю, почему я получаю эту ошибку.Любая помощь приветствуется.

Ответы [ 2 ]

2 голосов
/ 29 июля 2011

Ошибка проверки: значение не является правильным - это не ошибка преобразователя, а ошибка валидатора. Используете ли вы пользовательские объекты в раскрывающемся списке? Если да, то вам нужно перезаписать equals () и hashCode () для пользовательского объекта.

0 голосов
/ 29 июля 2011

На этапе применения значений запроса в запросе на отправку формы JSF повторно получит список выбранных элементов из bean-компонента, чтобы сравнить выбранное значение со списком, чтобы предотвратить передачу на стороне сервера поддельных / подделанных отправлений.Если ни один из элементов equals() не выбрал значение, то вы получите эту ошибку.

Похоже, что компонент находится в области запроса и / или вы занимаетесь бизнесом в геттере.Вам нужно поместить компонент в область просмотра (или когда вы используете JSF 1.x, <a4j:keepAlive> в компоненте) и переместить всю бизнес-логику за пределы геттеров, чтобы заставить ее работать должным образом.

...