JSF 由于 rendered 导致 得到属性值为null的解决办法

前段时间用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");
}

   

   

    

你可能感兴趣的:(Ajax,bean,JSF)