JSF 2 注入具有@ManagedProperty且无 xml 的 Spring Bean/服务

2022-09-03 12:47:15

我想使用jsf注释和一些弹簧注释将弹簧bean/服务注入jsf管理的bean中。(在jsf bean上我只想使用jsf注释)我不想使用像 / 这样的注释。@named@inject

我试图在网上找到一个解决方案,但没有任何运气。

@ManagedBean
@ViewScoped 
public class MyBean {

    @ManagedProperty(value = "#{mySpringBean}")
    private MySpringBean mySpringBean;

    public void setMySpringBean(MySpringBean mySpringBean) {
        this.mySpringBean = mySpringBean;
    }

    public void doSomething() {
    //do something with mySpringBean
    }
}

在不使用 xml 的情况下,这样的事情是可能的。例如,我不想使用类似的东西

FacesContextUtils.getWebApplicationContext(context).getBean("MySpringBean");

或在faces-config.xml

<managed-bean>
    <managed-bean-name>myBean</managed-bean-name>
    <managed-bean-class>com.mytest.MyBean</managed-bean-class>
    <managed-bean-scope>view</managed-bean-scope>
    <managed-property>
        <property-name>mySpringBean</property-name>
        <value>#{mySpringBean}</value>
    </managed-property>
</managed-bean>

使用注释并且不定义config xml文件中每个bean的所有jsf bean/属性和spring bean/属性,是否可以使用上述内容?


答案 1

如果您已经拥有Spring容器,为什么不使用它@Autowired注释。为此,请按照 Boni 的建议.xml更新您的面孔配置。然后将这些侦听器添加到您的Web.xml在此之后

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>

<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<listener>
  <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>

然后将这些添加到您的应用程序Context.xml

<context:component-scan base-package="com.examples" />

现在你可以使用Spring注释,你的bean将是这样的:

package com.examples;
@Component
@Scope(value="request")
public class MyBean {
    @Autowired
    private MySpringBeanClass mySpringBean;
}

用@Service注释你的MySpringBeanClass

另请参阅:


答案 2

将此代码放在您的面部配置中.xml

<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_2_0.xsd"
    version="2.0">
    <application>
        <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
    </application>
</faces-config>

然后在您的 ManageBean 构造函数调用中;

WebApplicationContext ctx =  FacesContextUtils.getWebApplicationContext(FacesContext.getCurrentInstance());
mySpringBean = ctx.getBean(MySpringBean.class);

MySpringBean意味着你的春豆类


推荐