2011-05-06 111 views
0

我在我的網頁上有這樣的選擇/下拉菜單。此下拉菜單應根據選定的項目生成另一個下拉菜單。我這樣做的方式是通過撥打電話<f:ajax event="change"..listener=..>JSF呈現不起作用

但這並沒有像我期望的那樣發生。在下拉菜單中選擇項目時,會觸發ajax標記中的偵聽器,但下列下拉表中的rendered屬性似乎不受此更改的影響。並且rendered的值從false成功更改爲true。哪個..讓我想知道我的jsf頁面有什麼問題。

這裏是XHTML 「

     <h:selectOneMenu value="#{teacher.viewCategory}"> 
          <f:selectItem itemValue="0" itemLabel="Tahun" /> 
          <f:selectItem itemValue="1" itemLabel="Mata Pelajaran" /> 
          <f:ajax event="change" render="divYearSelection divCourseSelection" 
            listener="#{teacher.enableViewCategory}"/> 
         </h:selectOneMenu> 

         <h:panelGroup id="divYearSelection" layout="block" rendered="#{teacher.showViewYearSelection}"> 
          <h:outputText value="YEAR"/> 
         </h:panelGroup> 

         <h:panelGroup id="divCourseSelection" layout="block" rendered="#{teacher.showViewCourseSelection}"> 
          <h:outputText value="COURSE"/> 
         </h:panelGroup> 


         <h:commandButton value="#{msg.tcr_form_submit_view}" action="#{teacher.viewTeacher}"/> 
        </h:panelGrid> 
       </h:form>' 

,這是bean的功能支持AJAX

public void enableViewCategory(AjaxBehaviorEvent e) {  
     if (this.getViewCategory().equals("0")) { 
      this.setShowViewYearSelection(true); 
     } else { 
      this.setShowViewCourseSelection(true); 
     } 
    } 

當我調試,功能工作正常。

+0

如果你在你的ajax命令中使用'render =「@form」'它會工作嗎? – 2011-05-06 05:59:16

+0

這個技巧!你介意在ajax標籤上更多地解釋我嗎?另外,這樣做的答案,以便我可以評價你。謝謝! – 2011-05-06 07:14:23

+0

@Matt你可以請發表這個答案,以便我可以評價它嗎? – 2011-05-06 07:59:28

回答

3

如果局部渲染不起作用,一個好的起點是在瀏覽器中呈現頁面時查看頁面的html源代碼。您的render="divYearSelection"只有在兩者(ajax觸發組件和目標組件)具有相同的直接父容器時才起作用。渲染HTML組件的

IDS通常看起來像id="formId:componentId:nestedComponentId1"id="formId:componentId:nestedComponentId2"

所以一個render="nestedComponentId2"從COMPONENT1稱爲如果兩個IDS具有相同的「預告片」纔有效。

您可以嘗試使用完整的id,如示例中給出的示例的id或者(如果整個表單不是太大)使用render="@form"更新整個表單。