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");
}

   

   

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值