使用EL表达式向Managed Bean传递参数

这是开发人员经常遇到的问题,不过回答可能令人沮丧,简单的回答是不行。
是的,你无法通过使用EL表达式向Managed Bean传递参数,至少目前不行,JSF1.2不行。
不对吧,你也许会说,因为EL表达式:#{securityContext.userInRole['admin']}是可以工作的。
这不就是向向一个Managed Bean(securityContext)的方法(userInRole)传递了一个参数值('admin')吗?
且慢!事情不是你看上去的那样!
EL表达式分两种,一种是ValueExpression,一种是MethodExpression。

1. ValueExpression
ValueExpression是绑定到Managed Bean的属性上的。
ValueExpression的解析原理是从左到右、按先后的部分解析,表达式的后面的部分是作为前面部分的属性。
比如,#{securityContext.userInRole['admin']}其实是和#{securityContext.userInRole.admin}等价的。
其含义都是:查找 #{securityContext.userInRole}对象的admin属性,由于#{securityContext.userInRole}是一个Map类型的对象,因此获取其admin属性,就是在Map中查找key='admin'的value值。
现在,你应该注意到'admin'是被[]包围的,而不是(),所以这不是方法调用,而是获取Map对象中的key='admin'的value值。

2. MethodExpression
MethodExpression是绑定到Managed Bean的方法上的。
MethodExpression的解析原理也是从左到右、按先后的部分解析,表达式的后面的部分是作为前面部分的方法的上下文环境。
但是目前不支持使用EL表达式向Managed Bean传递参数。

难道说,就没有办法向Managed Bean传递参数了吗?当然不是,我们可以不使用EL,通过其它方式也能达到目的。

3. 使用其它方式向Managed Bean传递参数
基本思路都是参数绑定到Managed Bean的某个属性,也就是说,方法的定义中不包括参数,但是可以在方法体中获取参数值。
(1)直接把参数绑定到Managed Bean的某个属性
比如,在页面中使用#{myBackingBean.firstname},在Managed Bean中定义firstname属性,以及getter和setter方法。
(2)把变量值放到Memory Scope中,然后在Managed Bean中获取,详见《 使用Managed Bean访问各个Scope变量 》。
(3)通过ADF Binding保存变量,然后在Managed Bean中获取,详见《 ADF工具类:JSFUtil.java 源代码 》和《 ADF工具类:ADFUtil.java 源代码 》。
(4)通过在faces-config.xml或adfc-config.xml中的Managed Bean的定义传递参数。
<managed-bean>
 <managed-bean-name>userbean</managed-bean-name>
 <managed-bean-class>com.oracle.sample.User</managed-bean-class>
 <managed-bean-scope>request</managed-bean-scope>
 <managed-property>
   <property-name>userType</property-name>
    <value>#{reference['USER_TYPES'].['EMPLOYEE']}</value>
  </managed-property>
</managed-bean> 


当然,我承认,如果EL表达式能够支持,是最简洁一种实现方式。

参考文献:
1. https://blogs.oracle.com/jdevotnharvest/entry/passing_parameters_to_managed_bean_method_using_el
2. https://forums.oracle.com/forums/thread.jspa?messageID=3963557

3. https://forums.oracle.com/forums/thread.jspa?threadID=1039258


from:

http://maping930883.blogspot.com/2012/03/adf114elmanaged-bean.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值