JSF selectOneMenu ajax不会触发侦听器

时间:2015-03-31 12:37:32

标签: ajax forms jsf listener selectonemenu

上下文是添加或修改数据库表条目的表单。 在其中,我想创建一个搜索/选择子表单:

  1. 请求数据库填充selectOneMenu的搜索文本输入
  2. 动态填充selectOneMenu以选择值
  3. 带有硬编码值的经典selectOneMenu
  4. 到目前为止,我实现了只有在修改现有条目(通过URL传递id)时才能使搜索文本输入有效。如果我在创建一个新的时候它不起作用。

    第二个问题是(在修改条目的情况下,已经有效),当在selectOneMenu中选择了一个值时,似乎没有调用监听器。但是对于具有硬编码值的selectOneMenu,它可以正常工作。有关其他信息,请参阅编辑

    这是子表单代码:

    <h:form>
        <h2>#{msg['addPeopleToFilm']}</h2>
        <div class="inputWrapper"> 
            <h:inputText id="search" value="#{beanPersonne.recherche}" >
                <f:ajax listener="#{beanPersonne.searchStringChanged}" render="output" event="change" />
            </h:inputText>
            <label>#{msg['personSearch']}</label>
        </div>
    
        <div class="selectWrapper" >
            <h:selectOneMenu value="#{beanFilm.idToAdd}" id="output" >
                <f:selectItems 
                value = "#{beanPersonne.resultatsRechercheDynamique}" 
                var="personne" 
                itemValue="#{personne.idPersonne}"
                itemLabel="#{personne.prenom} #{personne.nom}" /> 
                <f:ajax listener="#{beanFilm.idToAddChanged}" render="idToAdd" event="change" />
                </h:selectOneMenu>
            </div>
    
            <div class="selectWrapper" >
            <h:selectOneMenu value="#{beanFilm.categoryChoice}" id="category"> 
                <f:selectItem itemLabel="#{msg['actor']} ›" itemValue="0" />
                <f:selectItem itemLabel="#{msg['producer']} ›" itemValue="1" />
                <f:selectItem itemLabel="#{msg['director']} ›" itemValue="2" />
                <f:ajax listener="#{beanFilm.categoryChoiceChanged}" render="categoryChoice" event="change" />
                </h:selectOneMenu> 
            </div>
    
        <h:commandButton value="Test">
        </h:commandButton>
    
        <h2><h:outputText id="idToAdd" value="#{beanFilm.idToAdd}" /></h2>
        <h2><h:outputText id="categoryChoice" value="#{beanFilm.categoryChoice}" /></h2>
    </h:form>
    

    这是我的bean beanFilm的大部分内容(在beanPersonne中几乎相同):

    公共类BeanFilm实现Serializable {

        private static final long serialVersionUID = 807253156212218187L;
        private Film film = new Film();
        private String recherche = new String();
        private String idToAdd = new String();
        private String categoryChoice = new String();
        private List<Film> resultatsRechercheDynamique = new ArrayList<Film>();
    
    
        public List<Film> getResultatsRechercheFilmPro() {
            return DAOFilmJPA.getInstance().getFilmsParTitre(recherche);
        }
    
        public String searchByTitle(String title)
        {
            recherche = title;
            this.resultatsRechercheDynamique = getResultatsRechercheFilmPro();
            return null;
        }
    
        public void searchStringChanged(AjaxBehaviorEvent abe)
        {
            searchByTitle(recherche);
        }
    
    
        public void idToAddChanged(AjaxBehaviorEvent abe)
        {
            // HERE GOES FUTURE CODE
        }
    
        public void categoryChoiceChanged(AjaxBehaviorEvent abe)
        {
            // HERE GOES FUTURE CODE
        }
    
    
        public List<Film> getResultatsRechercheDynamique() {
            return resultatsRechercheDynamique;
        }
    
        public void setResultatsRechercheDynamique(
                List<Film> resultatsRechercheDynamique) {
            this.resultatsRechercheDynamique = resultatsRechercheDynamique;
        }
    
            public Film getFilm() {
            return film;
        }
    
        public void setFilm(Film film) {
            this.film = film;
        }
    
        public int getIdFilm() {
            return film.getIdFilm();
        }
    
        public void setIdFilm(int id) {
            film = DAOFilmJPA.getInstance().get(id);
        }
    
        public String getRecherche() {
            return recherche;
        }
    
        public void setRecherche(String recherche) {
            this.recherche = recherche;
        }
    
        public String doRecherche() {
            return "toResultatsRecherche";
        }
    
        public String getIdToAdd() {
            return idToAdd;
        }
    
        public void setIdToAdd(String idToAdd) {
            this.idToAdd = idToAdd;
        }
    
        public String getCategoryChoice() {
            return categoryChoice;
        }
    
        public void setCategoryChoice(String categoryChoice) {
            this.categoryChoice = categoryChoice;
        }
    }
    

    编辑:如果我在第一个selectOneMenu中添加一个具有固定值的selectItem,在selectItem s 旁边,它会触发侦听器就好了,但仅限于此条目,而不是selectItem s 生成的那些。 使用调试模式,我发现选择selectItem s 生成的值不会调用链接侦听器,而使用selectItem时会调用它。

0 个答案:

没有答案