2011-02-09 83 views
2

我正在考慮在我的web應用程序上創建一個隱藏/可顯示的菜單。在此之前,我爲此目的廣泛使用了PHP和AJAX。但是,由於HTML元素id在JSF框架中重新生成,我發現這種方法至少在我的範圍內不再可行。JSF和f:用於隱藏/顯示div的ajax

我讀過JSF中的f:ajax標籤,並試圖實現它。顯然我沒有運氣。它看起來很容易,但我仍然無法找出我做錯了什麼。

我準備了一個原型來測試f-ajax標籤的功能,但沒有運氣。這裏是代碼

` <h:body> 
    <h:outputLabel> 
     <h:outputText value="Click A" /> 
     <f:ajax event="click" render="textA"/> 
    </h:outputLabel> 
    <h:outputLabel> 
     <h:outputText value="Click B" /> 
     <f:ajax event="click" render="textB"/> 
    </h:outputLabel> 
    <h:outputLabel> 
     <h:outputText value="Click C" /> 
     <f:ajax event="click" render="textC"/> 
    </h:outputLabel> 

    <h:outputText id="textA" value="Click A" /> 
    <h:outputText id="textB" value="Click B" /> 
    <h:outputText id="textC" value="Click C" /> 
    </h:body>` 

當我點擊特定的標籤時,什麼都沒有發生。 textA,textB和textC元素已經呈現在第一位。我做錯了什麼人?

在此先感謝。

回答

7

然而,由於HTML元素的ID在JSF框架

再生如果是這樣的重要,只是指定固定idŞ自己。每個組件都有一個id屬性。這樣,只要適用,您應該可以使用普通的JS/jQuery框架。

至於具體問題的問題,這裏有一個應該讓你開始的實例。

<h:form> 
    <f:ajax render="text"> 
     <h:commandLink value="Click A" action="#{bean.setShow('A')}" /><br/> 
     <h:commandLink value="Click B" action="#{bean.setShow('B')}" /><br/> 
     <h:commandLink value="Click C" action="#{bean.setShow('C')}" /><br/> 
    </f:ajax> 

    <h:panelGroup id="text"> 
     <h:outputText value="Clicked A" rendered="#{bean.show == 'A'}" /> 
     <h:outputText value="Clicked B" rendered="#{bean.show == 'B'}" /> 
     <h:outputText value="Clicked C" rendered="#{bean.show == 'C'}" /> 
    </h:panelGroup> 
</h:form> 
組合

@ManagedBean 
@ViewScoped 
public class Bean { 

    private String show; 

    public String getShow() { 
     return show; 
    } 

    public void setShow(String show) { 
     this.show = show; 
    } 

} 
+0

1 :)找到一個很好的參考。 – Lion 2011-11-18 22:30:02

0

閱讀你的代碼我會先給出一些一般性的建議:

  • 據我瞭解Ajax的工作原理上輸入元素,但不是outputLabel。使用h:commandLink或h:commandButton代替
  • outputText不應該在outputLabel之內。這裏不需要outputLabel
  • 底部的outputText元素總是顯示,除非您使用呈現的屬性:<h:outputText id="textA" value="Click" rendered="false" />。您可以使用一些EL表達式來渲染呈現屬性的條件。

我認爲最好的方法是從Java-EE-Tutorial開始學習jsf的基本概念。