当前位置: 首页 > 知识库问答 >
问题:

无法从托管Bean实例化Spring Bean,Spring+JSF[重复]

诸葛康胜
2023-03-14

我使用JSF和托管Beans创建了一个简单的应用程序。从托管bean,我试图实例化一个将数据存储到数据库的spring bean。然而,“@autowired”注释似乎不起作用,因为我得到了一个nullpointerexcpetion。我阅读了关于如何在Spring中使用JSF和托管bean的所有相关主题,但不能解决这个问题。也许有人可以看看下面的代码,给我一个提示?

########## ManagedBean #########

    @Component
    @Scope("request")
    @Qualifier("memberBean")
    public class ProjectEntityHandlerBean
    {

      private  List projectList;

      @Autowired
      private ProjectBeanLocal projectBean;

    public ProjectEntityHandlerBean()
    {

    }

    public List getProjectList() {  
        return projectList;  
    } 


        public String getAllProjects()
        {       
            projectList = projectBean.getAllProjects();
            return "true";      
        }

服务Bean


    @Service
    public class ProjectBean implements ProjectBeanLocal {

          @PersistenceContext
          private EntityManager em;

        /**
         * Default constructor. 
         */

        public ProjectBean() {
            // TODO Auto-generated constructor stub
        }

        @Transactional
        public List getAllProjects()

        {   
            System.out.println("ProjectBean invoked");

            Query query = em.createQuery("SELECT p FROM Project p");

            @SuppressWarnings("unchecked")




        List projects = query.getResultList();                 
            return projects;
        }

faces.config.xml

 <application>
     <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
    </application>

    <managed-bean>
        <managed-bean-name>loginBean</managed-bean-name>
        <managed-bean-class>com.example.controller.LoginBean</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>

    <managed-bean>
        <managed-bean-name>ProjectEntityHandlerBean</managed-bean-name>
        <managed-bean-class>com.example.controller.ProjectEntityHandlerBean</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>

共有1个答案

燕宏胜
2023-03-14

如果您看到您的配置@component是一个Spring注释。您正在faces-config.xml中安装ProjectEntityHandlerBean。因此,首先将ProjectEntityHandlerBean实例化为JSF ManagedBean。

因此,必须@managedproperty 像这样将服务类注入到JSF托管bean中。

<managed-bean>
  <managed-bean-name>ProjectEntityHandlerBean</managed-bean-name>
  <managed-bean-class>com.example.controller.ProjectEntityHandlerBean</managed-bean-class>
  <managed-bean-scope>request</managed-bean-scope>
  <managed-property>
   <property-name>ProjectBeanLocal</property-name>
   <property-class>Qualified path for this class</property-class>
   <value>#{projectBeanLocal}</value>
  </managed-property>
 </managed-bean>

从上面的ProjectEntityHandlerBean中删除@autowired

重要:您只能使用@autowired注释注入一个spring bean另一个spring bean。如果您想要将一个spring bean注入到JSF ManagedBean,或者将一个JSF ManagedBean注入到另一个JSF ManagedBean,如果您使用的是JSF2.0或更高版本,则可以使用@ManagedProperty,或者对于JSF1.2版本使用

 类似资料:
  • 主要内容:实例,运行测试结果以下代码显示了如何进行bean注入。 我们先定义一个消息bean,它有一个字符串属性来存储消息。 然后我们再定义另一个托管bean,并使用注解注入。 实例 打开 NetBean8.2,创建一个名为: InjectManagedBeans 的工程,并加入以下文件代码。 以下是文件:UserBean.java 中的代码 - 以下是是文件:index.xhtml 中的代码 - 以下是文件:Message

  • 托管bean它是一个纯Java类,它包含一组属性和一组,方法。 以下是托管bean方法执行的常见功能: 验证组件的数据 处理组件触发的事件 执行处理以确定应用程序必须导航的下一页 它也可以作为JFS框架的模型。 JSF托管Bean示例 请看看下面一段示例代码 - 您可以通过以下方式使用此。 通过配置成XML文件。 通过使用注释。 通过XML文件配置托管Bean 在xml文件配置是比较旧方法。 在这

  • 主要内容:使用XML配置,使用@ManagedBean注解JSF 托管bean(Managed Bean)是JSF注册的常规Java Bean类。托管bean包含getter和setter方法,业务逻辑。JSF托管bean作为UI组件的Model。 它存储JSF xhtml页面使用的数据。借助JSF框架,可以从JSF页面访问托管Bean。 在JSF 1.2中,我们必须在JSF配置文件(如)中注册受管理的bean。 从JSF 2.0可以使用注解注册管理be

  • 我正计划将一个web应用程序从使用JSF托管bean转换为使用CDI托管bean。我知道我需要做以下工作: 在WEB-INF中添加空beans.xml文件。 将所有JSF@ManagedBean替换为CDI@Named Annotations。 用CDI或OmniFaces作用域注释替换所有JSF作用域注释。 将所有JSF@ManagedProperty替换为CDI@Inject Annotati

  • 如何从Servlet访问JSF ViewScope托管bean? (假设所讨论的托管bean已经创建,但尚未销毁)

  • 在执行CRUD时,我有一个RequestScope票据bean。 我有一个XHTML页面,直到现在我一直在使用它来创建新的票据;票证字段直接填充(等等) 现在我有了一个搜索表单,它列出了票证,每个票证都有一个以票证id为参数的链接。我希望支持bean从EJB/JPA(已经完成)检索票证bean并将其放入请求中。我认为有三种方法可以做到这一点: 将从JPA检索到的bean中的数据复制到注入提供的be