JSF 1.2单选按钮ValueChangeListener值未保存

时间:2013-11-01 07:14:55

标签: java jsf-1.2 valuechangelistener

我在这里使用单选按钮的ValueChangeListener有点问题。 我使用Apache Tomcat 7.0和JSF 1.2。

* t tomahawk

<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?

我做错了什么?

2 个答案:

答案 0 :(得分:0)

我认为它与 testBean 范围有关。如果您没有明确指定,那么默认情况下它是无状态。重新加载页面时,您将创建另一个testBean对象,因此 radioItem 变量的先前值不再存在。将范围更改为 SESSION 可能会帮助您保持复选框状态,直到您退出为止。

答案 1 :(得分: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);