【问题标题】:JSF 1.2 Radio Button ValueChangeListener Value not savedJSF 1.2 单选按钮 ValueChangeListener 值未保存
【发布时间】:2013-11-12 09:28:45
【问题描述】:

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

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

我做错了什么?

【问题讨论】:

    标签: java jsf-1.2 valuechangelistener


    【解决方案1】:

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

    【讨论】:

    • 我的 bean 已经是会话范围的。顺便说一句,我认为这与应用程序生命周期有关,但我不知道要改变什么。
    【解决方案2】:

    好像这样有效:

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

    【讨论】:

      猜你喜欢
      • 2010-12-24
      • 1970-01-01
      • 2014-10-24
      • 2017-01-05
      • 2018-04-12
      • 1970-01-01
      • 2013-04-26
      • 2011-10-31
      • 1970-01-01
      相关资源
      最近更新 更多