当前位置: 首页 > 面试题库 >

JSF 2使用@ManagedProperty且没有xml注入Spring bean /服务

池砚文
2023-03-14
问题内容

我想使用jsf批注和一些spring批注将spring 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 /属性的情况下使用注释进行上述操作?


问题答案:

如果你已经有了Spring容器,为什么不使用其@Autowired注释。为此,请按照Boni的建议更新你的faces-config.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>

然后将它们添加到你的applicationContext.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



 类似资料:
  • 我有几个EJB3。x无状态会话bean,未定义接口。我需要将这些bean注入到Springbean中,但我无法这样做。 无接口EJB: 我的豆子: 还有我的豆子。xml 在初始化Spring容器时,我得到以下错误: 异常本身非常清楚——spring容器期望MyBean有一个本地接口视图作为其业务接口;但是,我没有(也不能介绍)。 非常感谢您的帮助!

  • 问题内容: 我想知道是否有可能仅使用Java创建Android应用。没有XML,没有其他东西。 在Eclipse中,当我创建一个新的Android项目时,将自动生成Manifest xml文件和主布局xml文件。我可以删除这些文件并用Java文件替换吗? 问题答案: 对于布局,您有两个选择 在XML中声明UI元素。Android提供了一个简单的XML词汇表,它对应于View类和子类,例如小部件和布

  • 我写了一个示例Spring启动应用程序,它无法运行消息 `描述:com中的customerRepository字段。hibernatetutorial。服务CustomerServiceImpl需要“com”类型的bean。hibernatetutorial。存储库。找不到CustomerRepository“”。 操作:考虑在您的配置中定义类型为“com.hibernatetutorial.re

  • 我有一个运行大型企业应用程序的场景。 我有一个没有@SpringBootApplication的应用程序,叫做XYZ应用程序。应用程序没有在ABC应用程序中自动连接,ABC应用程序有@SpringBootApplication,我在Intellij中运行它。如何确保在运行应用程序时创建bean 注意:我将XYZ应用程序的JAR作为渐变版本。XYZ api和XYZ impl有单独的JAR。 我得到的

  • 问题内容: 在我的Java EE 6网络应用程序(在最新的GlassFish 3.1上运行)中,我正在使用JSF2-ManagedBeans并将其注入到其他ManagedBeans中。现在我想知道是否也可以使用将a 注入a 中。一些代码: ManagedBean看起来像这样: 这样工作吗?如果没有,我还必须通过什么其他方式将ManagedBean注入WebServlet(不使用CDI,目前还不行,

  • 问题内容: 我试图通过注释将整个JSF托管Bean注入另一个托管Bean非常相似,但是我正在注入Bean,而不是Servlet)。这就是我在做什么: 不起作用(JSF 2.0 / Mojarra 2.0.3): 有没有可能或者我需要通过编程方式进行注射? 问题答案: 您需要添加setter和getter 当将解析并注入依赖项时,它将使用setters注入,因此适当的setters / getter