2013-11-01 74 views
0

我在這裏有一個單選按鈕的ValueChangeListener的小問題。 我使用Apache Tomcat 7.0和JSF 1.2。JSF 1.2單選按鈕ValueChangeListener值未保存

* T戰斧扣籃

<t:selectOneRadio id="testRadio" onchange="submit()" value="#{testBean.radioItem}"> 
    <f:selectItems value="#{testBean.radioItems}" /> 
    <f:valueChangeListener type="packe.path.testBean" /> 
</t:selectOneRadio> 

我的豆:

public class testBean implements ValueChangeListener, ActionListener, Serializable { 

    // ... 

    @Override 
    public void processValueChange(ValueChangeEvent event) throws AbortProcessingException { 
    this.data.clear(); 
    this.ceil = false; // ceil belongs to a checkbox 
    } 
} 

好了,問題是:如果我改變單選按鈕的價值,我想我的ValueChangeListener被解僱。在監聽器中,我想將bean中的另一個屬性(ceil)設置爲false,所以我的複選框被取消選中。 在調試模式下,我已檢查單選按鈕的偵聽器是否被觸發。它是。

我現在的問題是,如果我重新加載頁面,那麼複選框具有與以前一樣的值 - 但我在偵聽器中將其設置爲false?

我在做什麼錯?

回答

0

我認爲這與testBean範圍有關。如果你沒有明確指定,那麼默認情況下它是無狀態。當您重新加載頁面時,您將創建另一個testBean對象,以便radioItem變量的先前值不再存在。將範圍更改爲SESSION可能能夠幫助您保持複選框狀態,直到您註銷爲止。

+1

我已經bean是會話範圍。順便說一句,我認爲它必須做一些與應用程序生命週期,但我不知道該怎麼改變。 – user2944100

0

好像這個工程:

context.renderResponse(); 

ViewHandler handler = context.getApplication().getViewHandler(); 
String viewId = context.getViewRoot().getViewId(); 
UIViewRoot root = handler.createView(context, viewId); 

root.setViewId(viewId); 
context.setViewRoot(root);