前段时间用JSF时遇到如下问题.
问题描叙:
页面有一个 单选控件(h:selectOneRadio) 添加 ajax 支持(a4j:support event="onclick" reRender=""),当选择某个选项的时候会有不同的操作,因此界面会有不同的展示.
可变化部分用到 rendered 属性在后台控制展现逻辑.
问题出现:点击不同的选项,可变化部分的页面展示没有问题,提交(SUBMIT)的时候,不会变化的部分取值没有问题,变化展示部分的属性值,不能取到,跟踪之后发现值为null.(不存在属性名称没对应上的错误)
解决办法1.
用decode()方法
// cform 为表单 id UIComponent component=FacesContext.getCurrentInstance().getViewRoot().findComponent("cform"); //day 为 文本输入框id if(component!=null){ ((UIInput)component.findComponent("day")).decode(FacesContext.getCurrentInstance()); //day 为bean 中属性值 day=(String)(((UIInput)component.findComponent("day")).getSubmittedVale());
解决办法2
用session 在 set 单选控件属性值的时候 把 属性值放入session中
public void setXXX(String XXX){ FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("xxx",xxx); } //然后在构造方法中把xxx值从session 中赋上去 public ClassName(){ xxx=FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("xxx"); }