高分求答:JSF中不能取得bean
web.xml中有如下配置
- XML code
<context-param> <param-name>javax.faces.CONFIG_FILES</param-name> <param-value> ...... /WEB-INF/faces-managed-beans-user.xml, ... ... </param-value></context-param>
faces-managed-beans-user.xml中有 bean的配置(alertConfigBean和ruleBean)如下:
- XML code
<managed-bean> <managed-bean-name>alertConfigBean</managed-bean-name> <managed-bean-class> com.test.bean.rule.AlertConfigBean </managed-bean-class> <managed-bean-scope>application</managed-bean-scope></managed-bean>...... <managed-bean> <managed-bean-name>ruleBean</managed-bean-name> <managed-bean-class> com.infosec.secsrv.scms20.bean.rule.RuleBean </managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean>
我想在RuleBean中取得alertConfigBean,怎么获取?
用下面的代码不可以吗?为什么取出来的是null?
FacesContext.getCurrentInstance().getExternalContext().getApplicationMap().get("alertConfigBean");
求高手解答!
[解决办法]
国庆国庆,全国同庆!放下代码,去玩吧!
[解决办法]
[解决办法]
[解决办法]
遇到同样类似问题啊...
[解决办法]
在定义ruleBean时把alertConfigBean写在<property>里不行吗
[解决办法]
你把FacesContext.getCurrentInstance().getExternalContext().getApplicationMap()打印一下
应该是没有给alertConfigBean实例化,当然就是空的了
[解决办法]
JSF,向楼主学习一下
[解决办法]
[解决办法]
http://www.360doc.com/content/11/0118/13/19525_87338785.shtml
<?xml version="1.0" encoding="UTF-8"?>
<faces-config xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
version="1.2">
<managed-bean>
<managed-bean-name>modelBean</managed-bean-name>
<managed-bean-class>myproject.ModelBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>backingBean</managed-bean-name>
<managed-bean-class>myproject.BackingBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>controllerBean</managed-bean-name>
<managed-bean-class>myproject.ControllerBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>modelBean</property-name>
<value>#{modelBean}</value>
</managed-property>
</managed-bean>
</faces-config>
[解决办法]
看到这个问题:首先要说,jsf一般只作为显示层的实现。jsf管理的backing bean是作为控制器来连接UI和业务逻辑bean。你如果要得到backing bean,其实大可不必。backing bean只做为VO(传递数据)和调用后台业务Bean;如果要获得业务逻辑bean的话,其实你可以结合spring框架来做。有spring管理业务逻辑bean和backing bean,以上是个人建议。
具体怎么获得jsf管理的bean呢?
在网上查了些资料,内容如下:
如果要在其它类中取得Bean对象,则可以先取得javax.faces.context.FacesContext,它代表了JSF目前的执行环境对象,接着尝试取得javax.faces.el.ValueBinding对象,从中取得指定的Bean对象,例如:
FacesContext context = FacesContext.getCurrentInstance();
ValueBinding binding =
context.getApplication().createValueBinding("#{user}");
UserBean user = (UserBean) binding.getValue(context);
如果只是要尝试取得Bean的某个属性,则可以如下:
FacesContext context = FacesContext.getCurrentInstance();
ValueBinding binding =
context.getApplication().createValueBinding(
"#{user.name}");
String name = (String) binding.getValue(context);
本人没有验证,请lz自己验证下