2016-12-09 2 views
0

У меня есть 3 drop downs на моей странице jsf.При выборе значения из одного h: selectOneMenu drop down tag приводит к удалению значения другого значения выпадающего значения

  1. Прибытие Зона
  2. вылета Зона
  3. типа ваучера

Он присутствует в том же порядке в моей странице.

Если я выбираю значение для зоны прибытия или зоны вылета, а затем выбираю значение для зоны ваучера, значения в 1 и 2 меняются на значения по умолчанию.

Вот мой код.

<h:column rendered="#{(fplusRulesHandler.fplusRulesBean.searchBased eq 'DEP ZONE/ARR AIRPORT') or (fplusRulesHandler.fplusRulesBean.searchBased eq 'DEP ZONE/ARR ZONE')}"> 
    <h:outputText styleClass="head-table" value="Departing Zone"></h:outputText> 
    <h:outputText styleClass="mandatory" value="*" /> 
</h:column> 
<h:column rendered="#{(fplusRulesHandler.fplusRulesBean.searchBased eq 'DEP ZONE/ARR AIRPORT') or (fplusRulesHandler.fplusRulesBean.searchBased eq 'DEP ZONE/ARR ZONE')}"> 
    <h:selectOneMenu value="#{fplusRulesHandler.fplusRulesBean.fpuFlightRules.bpmAppFltIdentity.depZone}"> 
     <f:selectItems value="#{fplusRulesHandler.fplusRulesBean.arrDepZoneList}"></f:selectItems> 
    </h:selectOneMenu> 
</h:column> 

<h:column rendered="#{(fplusRulesHandler.fplusRulesBean.searchBased eq 'ARR ZONE/DEP AIRPORT') or (fplusRulesHandler.fplusRulesBean.searchBased eq 'DEP ZONE/ARR ZONE')}"> 
    <h:outputText styleClass="head-table" value="Arrival Zone"></h:outputText> 
    <h:outputText styleClass="mandatory" value="*" /> 
</h:column> 
<h:column rendered="#{(fplusRulesHandler.fplusRulesBean.searchBased eq 'ARR ZONE/DEP AIRPORT') or (fplusRulesHandler.fplusRulesBean.searchBased eq 'DEP ZONE/ARR ZONE')}"> 
    <h:selectOneMenu value="#{fplusRulesHandler.fplusRulesBean.fpuFlightRules.bpmAppFltIdentity.arrZone}"> 
     <f:selectItems value="#{fplusRulesHandler.fplusRulesBean.arrDepZoneList}"></f:selectItems> 
    </h:selectOneMenu> 
</h:column> 

<h:column> 
    <h:outputLabel styleClass="head-table" value="Voucher Type"></h:outputLabel> 
</h:column> 
<h:column> 
    <h:selectOneMenu value="#{fplusRulesHandler.fplusRulesBean.fpuFlightRules.voucherType}"> 
     <f:selectItem itemLabel="LONG HAUL UPGRADE" itemValue="LONG HUAL UPGRADE" /> 
     <f:selectItem itemLabel="EUROPE UPGRADE" itemValue="EUROPE UPGRADE" /> 
     <f:ajax event="change" render="fplusAdd"></f:ajax> 
    </h:selectOneMenu> 
</h:column> 
<h:column rendered="#{fplusRulesHandler.fplusRulesBean.fpuFlightRules.voucherType == 'EUROPE UPGRADE'}"> 
    <h:outputLabel styleClass="head-table" value="#{message['FplusRules.AddRules.Label.RedemptionPointDiscount']}"></h:outputLabel> 
</h:column> 

<h:column rendered="#{fplusRulesHandler.fplusRulesBean.fpuFlightRules.voucherType == 'EUROPE UPGRADE'}"> 
    <h:inputText id="redemptionDiscount" value="#{fplusRulesHandler.fplusRulesBean.fpuFlightRules.redemptionPointsDisc}" validatorMessage="#{errorMessage['redemptionPointDiscountPositive']}" 
converterMessage="#{errorMessage['redemptionPointDiscountPositive']}"> 
     <f:convertNumber integerOnly="true"></f:convertNumber> 
     <f:validateLongRange minimum="0" /> 
    </h:inputText> 
    <h:message for="redemptionDiscount" errorStyle="padding-left:10px;color :red" /> 
</h:column> 
+0

Что такое fplusAdd? – Nurjan

+0

fplusA dd is panelGrid Id –

+0

Вы пытались установить для всех ? Кажется, что selectOneMenus получает сброс друг от друга - данные в них не получаются автоматически отправляются на сервер при выборе значения. – Nurjan

ответ

1

Как Нуржан указал, как вы не прилагаетесь никаких <f:ajax> тегов для первых 2 <h:selectOneMenu> тегов не Аякс события не увольняет, когда пользователь изменяет свой выбор в этих менюшка. Это означает, что сеттеры в вашей модели не вызываются. Но на третьем <h:selectOneMenu> вы приложили тег <f:ajax> с атрибутом render, который ссылается на идентификатор тега, который содержит все меню (как я могу предположить). Таким образом, на этапе отклика рендеринга вызываются геттеры всех компонентов внутри «fplusAdd», а меню возвращаются к их внутренним значениям. Чтобы устранить эту проблему, либо добавить Ajax тегов к первому менюшка, а также (так что модель обновляются с каждым userselection или просто ссылаться на них в Аяксе теге в выполнить атрибут, а также, как:

<h:selectOneMenu value="#{fplusRulesHandler.fplusRulesBean.fpuFlightRules.voucherType}"> 
     <f:selectItem itemLabel="LONG HAUL UPGRADE" itemValue="LONG HUAL UPGRADE" /> 
     <f:selectItem itemLabel="EUROPE UPGRADE" itemValue="EUROPE UPGRADE" /> 
     <f:ajax event="change" execute="fplusAdd" render="fplusAdd"></f:ajax> 
</h:selectOneMenu> 

Таким образом, первые два меню также будут обработаны (как и все, что находится внутри «fplusAdd»), что означает, что вызывается сеттеры модели. Если вы явно не добавляете атрибут execute, значение по умолчанию равно @this, что означает, что обрабатывается только сам компонент (вызываются соответствующие сеттеры)

Смежные вопросы