Обновить SelectOneMenu, если установлено значение ohter SelectOneMenu (событие не запускается)


В моем приложении я пытаюсь установить / обновить SelectOneMenu, если установлен другой SelectOneMenu. Мы используем primefaces, поэтому я проверил витрину primefaces и нашел именно то, что искал. К сожалению, это не работает. Мероприятие не уволено, и я не знаю, почему. Надеюсь, вы сможете мне помочь

Ссылка на пример витрины primefaces

-> Если язык установлен, он должен автоматически перезагрузить список с приветствиями, но это не так. нажать клавишу F5 для перезагрузки. Есть идеи?

Мой xHTML код

<h:form id="addressBasicsForm">
  <p:growl id="growl" sticky="true" showDetail="true"/>
  <p:tabView id="tabView">
    <p:tab id="stammdaten" title="#{msg.adr_basics_tabtitle}">
  <table style="width:100%;">
        <tr>
          <td style="width: 50%;">
    <p:panel toggleable="false">
      <table style="margin-top:3px; width:100%;">
        <tr style="height:26px;">
          <td>
            <p:selectOneMenu id="somLang" value="#AddressBasics_m.languageId}" style="margin-left:2px; width:90%;">
              <f:selectItems value="#{AddressBasics_m.languageItems}"/>
                      <p:ajax update="somAnrede" listener="#{AdressBasics_m.handleLanguageChange}"/>
            </p:selectOneMenu>
          </td>
        </tr>
        <tr style="height:26px;">
          <td>
            <p:selectOneMenu id="somAnrede" value="#AddressBasics_m.salutationId}" style="margin-left:2px; width:90%;">
              <f:selectItems value="#{AddressBasics_m.salutationItems}" />
            </p:selectOneMenu>
          </td>

Мой Боб

@Named("AddressBasics_m")
@ConversationScoped
public class AddressBasicsView implements Serializable{
private static final long serialVersionUID = -4034697810438325785L;

public List<SelectItem> getSalutationItems(){
    if(firstrun)
        languageId = 21L;

    firstrun = false;
    if(salutationItems == null || lastLanguageId != languageId){
        salutationItems = addressService.getAllSalutationsByLangId(languageId);
        setLastLanguageId(languageId);
    }
    return salutationItems;
}

public void handleLanguageChange(){
    this.salutationItems = getSalutationItems();
}
1 5

1 ответ:

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

<p:ajax render="@form" listener="#{AdressBasics_m.handleLanguageChange}"/>

Или

<p:ajax update=":addressBasicsForm:tabView:stammdaten:somAnrede" listener="#{AdressBasics_m.handleLanguageChange}"/>