2012-10-07 20 views
0

我在開發中使用JSF 2.0,tomahawk和一些f:ajax的東西。我正在嘗試對我的JSF應用程序做一些魔術字。當你點擊這個單詞時,它會變成另一個單詞,再次單擊它會再次更改它。爲了更清楚,這裏是一個場景。顯示XX的原始單詞,點擊XX時,XX將變爲YY。當點擊YY時,會改回到XX。你有沒有感受到魔法? :P如何刷新JSF h:panelGroup?

這就是我的做法。我創建了2 h:panelGroup。其中將包含一個XX字,另一個將包含YY的話,像這樣:

<h:panelGroup id="Panel_X"> 
    <h:outputText value="XX" /> 
</h:panelGroup> 

<h:panelGroup id="Panel_Y"> 
    <h:outputText value="YY" /> 
</h:panelGroup> 

爲了讓點擊,我使用commandLink。從上面的代碼修改,併成爲這個:

<h:panelGroup id="Panel_X" rendered="#{magicBean.show_X == true}"> 
    <h:commandLink action="#{myBean.doFunc}"> 
     <f:ajax event="action" render="Panel_Y"/> 
     <h:outputText value="XX" /> 
    </h:commandLink> 
</h:panelGroup> 

<h:panelGroup id="Panel_Y" rendered="#{magicBean.show_X == false}"> 
    <h:commandLink action="#{myBean.doFunc}"> 
     <f:ajax event="action" render="Panel_X"/> 
     <h:outputText value="YY" /> 
    </h:commandLink> 
</h:panelGroup> 

下面是支持bean:

@ManagedBean(name = "magicBean") 
@SessionScoped 
public class MagicWordBean { 

    public boolean show_X = true; 

    /** getter and setter of show_X **/ 

    public String doFunc() { 

     showX = !showX; 
     return ""; 
    } 
} 

我不知道我是否做正確,但有一點我肯定這是行不通的。最初當頁面加載時,它顯示XX字。當點擊XX字時,YY字不顯示,並且XX字保留在那裏。

任何線索?

+2

相關:http://stackoverflow.com/questions/9010734/why-do-i-need-to-nest-a-component-with-渲染,一些功能於另一組分-W – BalusC

回答

2

我認爲render="Panel_Y"是你的問題:你試圖呈現一些沒有呈現在頁面上的東西。嘗試呈現父/容器(即包含兩個面板的h:表單),這將重新評估第二個面板中的rendered="#{magicBean.show_X == false}"。 我也可以建議更改爲rendered="#{magicBean.show_Y}"爲可讀性...