【问题标题】:JSF rendered component not binding with ajax callJSF 呈现的组件未与 ajax 调用绑定
【发布时间】:2017-11-12 14:49:10
【问题描述】:

我需要帮助来渲染一个组件,该组件在渲染后又会进行 ajax 调用,但没有成功。 我有以下代码不起作用。我不知道我是否遗漏了什么。非常感谢任何帮助。

 <h:selectOneMenu id="gender" value="#{bean.gender}"  
     class="form-control"
     valueChangeListener="#{bean.updateGenderValue}" 
     onchange="submit()">

   <f:selectItems value="#{bean.genders}" var="gender" itemLabel="#
      {gender}" itemValue="#{gender}"/>                                                               
 </h:selectOneMenu> 

 <h:selectOneMenu value="#{bean.pregnancyStatus}"  
    class="form-control"
    rendered="#{bean.gender eq 'Female'}">
    <f:selectItems value="#{bean.options}" 
      var="pregnancyStatus" itemLabel="#{pregnancyStatus}" 
       itemValue="#{pregnancyStatus}"/>

   <f:ajax listener="#{bean.updatePregancyValue}" 
            execute="@this" render="@this"/>

</h:selectOneMenu> 


 public void updateGenderValue(ValueChangeEvent event) throws IOException {
    gender = (String) event.getNewValue();
 }

        public void updatePregancyValue(AjaxBehaviorEvent event) throws IOException {                                                                            
      System.out.println(":( == " + pregnancyStatus);
      }

怀孕状态值根本不会更新。

【问题讨论】:

    标签: jsf jsf-2


    【解决方案1】:

    你错过了&lt;h:form&gt;吗?我将您的代码复制并粘贴到我的项目中并

    我的代码:

    <div style="height:500px">
    <h:form>
    
    <h:selectOneMenu id="gender" value="#{bean.gender}"  
     class="form-control"
     valueChangeListener="#{bean.updateGenderValue}" 
     onchange="submit()">
    
    
    
    <f:selectItems value="#{bean.genders}" var="gender" itemLabel="#
          {gender}" itemValue="#{gender}"/>                                                               
     </h:selectOneMenu> 
    
     <h:selectOneMenu value="#{bean.pregnancyStatus}"  
        class="form-control"
        rendered="#{bean.gender eq 'Female'}">
        <f:selectItems value="#{bean.options}" 
          var="pregnancyStatus" itemLabel="#{pregnancyStatus}" 
           itemValue="#{pregnancyStatus}"/>
    
       <f:ajax listener="#{bean.updatePregancyValue}" 
                execute="@this" render="@this"/>
    
    </h:selectOneMenu> 
    

    让我们检查一下控制台:

    :( == 2
    :( == 3
    

    豆子:

    @ManagedBean(name = "bean")
    @ViewScoped
    public class Bean {
    
        private String pregnancyStatus;
        private List<SelectItem> options;
        private List<SelectItem> genders;
        private String gender;
    
        @PostConstruct
        public void initBean(){
            options = new ArrayList<>();
            genders = new ArrayList<>();
            options.add(new SelectItem("1"));
            options.add(new SelectItem("2"));
            options.add(new SelectItem("3"));
            genders.add(new SelectItem("Male"));
            genders.add(new SelectItem("Female"));
            genders.add(new SelectItem("third"));
        }
    
        public String getPregnancyStatus() {
            return pregnancyStatus;
        }
    
        public void setPregnancyStatus(String pregnancyStatus) {
            this.pregnancyStatus = pregnancyStatus;
        }
    
        public void updateGenderValue(ValueChangeEvent event) throws IOException {
            gender = (String) event.getNewValue();
        }
    
        public void updatePregancyValue(AjaxBehaviorEvent event) throws IOException {
            System.out.println(":( == " + pregnancyStatus);
        }
    
    }
    

    【讨论】:

    • 您的onchange="submit() 是做什么的?目前尚不清楚它在 OP 的问题中做了什么。最好让 OP 创建一个 minimal reproducible example.... 你不应该“尝试”并把事情弄清楚。但是感谢您的帮助!!!
    • 我在提交中的参数列表如下所示:j_idt9 j_idt9 j_idt9:gender 女性 j_idt9:j_idt11 3 javax.faces.ViewState 3848250333621752611:-7307656456661206570 javax.faces.source j_idt9:javaj_idt11 javaj_idt11 .event 更改 javax.faces.partial.execute j_idt9:j_idt11 javax.faces.partial.render j_idt9:j_idt11 javax.faces.behavior.event valueChange javax.faces.partial.ajax true
    • 不,它做什么?什么javascript被称为?你从哪里弄来的豆子?你怎么知道 OP 也使用了什么?
    • 嗯,好的。没有调用 javascript。我没有实现 onsubmit() 函数,因为在我看来它是不需要的。 JSF 完成这项工作
    • 是的,但它可能会为 OP 做一些事情并把事情搞砸/因此总是要求minimal reproducible example。节省您猜测和尝试的时间;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    • 2018-12-16
    • 1970-01-01
    • 2012-06-18
    相关资源
    最近更新 更多