2015-04-20 4 views
0

У меня есть 3 <p:selectOneMenu>, два из них здесь, чтобы подать 3-й. Но когда я выбираю в одном поле со списком, значение исчезает в другом.Двойной p: selectOneMenu для подачи одного последнего p: selectOneMenu с p: ajax listener

Для этого я использую компоненты 2 <p:ajax> в двух первых <p:selectonemenu>.

<p:panel columns="4" cellpadding="5" id="panelAddColor" header="#{msg['configuration_assignment_modif_panelheader']}" style="width: 500px;"> 
    <table> 
     <tr> 
      <td> 
       <h:outputLabel for="comboBox_listBump" value="#{msg['bumper']}" /> 
      </td> 
      <td> 
       <p:selectOneMenu id="comboBox_listBump" value="#{assignmentModificationController.idTypeBumper}" effect="fade" style="width: 100px;" styleClass="greyBackMenu" panelStyleClass="greyBackPanel"> 
        <p:ajax event="change" listener="#{assignmentModificationController.comboboxBumpersChange()}" update="machine,comboBox_listBump,tint" /> 
        <f:selectItem itemLabel="#{msg['menu_production_NewTech']}" itemValue="" /> 
        <f:selectItems value="#{assignmentModificationController.listBumper}" var="b" itemLabel="#{b.name}" itemValue="#{b.id}"/> 
       </p:selectOneMenu> 
      </td> 
      <td> 
       <p:message for="comboBox_listBump" /> 
      </td> 
     </tr> 
     <tr> 
      <td> 
       <h:outputLabel for="tint" value="#{msg['configuration_safetystock_tint']}" /> 
      </td> 
      <td> 
       <p:selectOneMenu id="tint" value="#{assignmentModificationController.idTint}" effect="fade" styleClass="greyBackMenu" panelStyleClass="greyBackPanel"> 
        <p:ajax event="change" listener="#{assignmentModificationController.comboboxBumpersChangeTint()}" update="machine,comboBox_listBump,tint" /> 
        <f:selectItem itemLabel="#{msg['menu_production_NewTech']}" itemValue="" /> 
        <f:selectItems value="#{assignmentModificationController.listTypeTint}" var="p" itemLabel="#{p.name}&#160;&#160;" itemValue="#{p.id}" /> 
       </p:selectOneMenu> 
      </td> 
     </tr> 
     <tr> 
      <td> 
       <h:outputLabel for="machine" value="#{msg['menu_configuration_machines']}" /> 
      </td> 
      <td> 
       <p:selectOneMenu id="machine" value="#{assignmentModificationController.idMachine}" effect="fade" > 
        <f:selectItem itemLabel="#{msg['menu_production_NewTech']}" itemValue="" /> 
        <f:selectItems value="#{assignmentModificationController.listMachines}" var="p" itemLabel="#{p.name}&#160;&#160;" itemValue="#{p.id}" /> 
       </p:selectOneMenu> 
      </td> 
      <td> 
       <p:message for="machine" /> 
      </td> 
     </tr> 
    </table> 

    <center> 
     <p:commandButton value="Créer" update="growl,panelAddColor" validateClient="true" style="font-size: 13px;" action="#{assignmentModificationController.addTintAssignment}" /> 
     - 
     <p:commandButton value="Quitter" style="font-size: 13px;" action="TO_config_menu" /> 
    </center> 
</p:panel> 

И мой тест в боб:

@PostConstruct 
public void init() { 
    setListBumper(TypeBumpHome.getAll()); 
    setListTint(TypeTintHome.getAll()); 
    setListMachines(MachineHome.getAll()); 

    List<TypeTint> allTypeTint = new ArrayList<TypeTint>(); 
    allTypeTint = TypeTintHome.getAll(); 

    for (TypeTint t : allTypeTint) { 
     colorList.put(t.getId(), t.getName()); 
    } 
    setListTypeTint(TypeTintHome.getAll()); 
} 

public void comboboxBumpersChange() { 
    System.out.println("BUMPER : " + getIdTypeBumper() + " " + getIdTint()); 
} 

public void comboboxBumpersChangeTint() { 
    System.out.println("TINT : " + getIdTypeBumper() + " " + getIdTint()); 
} 
+0

Какие масштабы вы используете для компонента? Является ли второе меню зависимым от первого? –

+0

Привет! @RequestScoped, нет никакой зависимости между 1-м и 2-м. Но 3-й строит с 1-й и 2-й (зависимость). –

+0

Будучи «@ RequestScoped», вы перестраиваете компонент для каждого запроса (устанавливаете значения по умолчанию при выполнении запроса ajax). Попробуйте пойти с '@ ViewScoped'. –

ответ

2

Согласно комментариям, вы используете @RequestScoped боб. События ajax вызывают новый запрос, поэтому он перестраивается и, следовательно, теряет свое текущее состояние. Решение состоит в том, чтобы использовать область обзора и воспользоваться преимуществами JSF-состояния.

Смотрите также

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