【问题标题】:Run ManagedBean on startup在启动时运行 ManagedBean
【发布时间】:2015-01-06 15:42:58
【问题描述】:

我正在使用 JSF 做一个项目,我想在启动时填充我的数据库(就像 Rails 中的种子文件),我已经搜索了这个论坛,但答案对我没有用,这里是代码:

DatabaseSeed.java:

package it.polimi.meteocal.business.control;

import it.polimi.meteocal.business.entity.User;
import javax.annotation.PostConstruct;
import javax.enterprise.context.ApplicationScoped;
import javax.faces.bean.ManagedBean;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@ApplicationScoped
@ManagedBean(eager=true)
public class DatabaseSeed {

    @PersistenceContext
    EntityManager em;

    private User user;

    /**
     *  Initialize database values
     */
    @PostConstruct
    public void init(){

        user.setIdUser(1);
        user.setEmail("provaprova@gmail.com");
        user.setGroupname("USERS");
        user.setName("Provaseed");
        user.setSurname("Provaseed");
        user.setPassword("prova");
        user.setUsername("prova");

        em.persist(user);
    }

}

在 faces-config.xml 中:

<managed-bean> 
  <managed-bean-name>DatabaseSeed</managed-bean-name> 
  <managed-bean-class>it.polimi.meteocal.business.control</managed-bean-class> 
  <managed-bean-scope>application</managed-bean-scope>
</managed-bean>

但是当我运行应用程序时,没有任何东西被插入到数据库中

【问题讨论】:

    标签: jsf managed-bean


    【解决方案1】:

    有两个错误:

    • 您通过注释和 XML 配置声明了托管 bean。当以两种方式声明托管 bean 时,XML 方式优先。您没有在 XML 中设置 eager=true,因此它不再急切地初始化。

      只需在faces-config.xml 中删除&lt;managed-bean&gt;。这是 JSF 2.x 中不需要的遗留 JSF 1.x 方式。

    • 您在 JSF 托管 bean @ManagedBean 上使用了 CDI 托管 bean 范围 @javax.enterprise.context.ApplicationScoped。这行不通。您需要声明一个 JSF 托管 bean 范围,否则它将默认为 @RequestScoped

      替换

      import javax.enterprise.context.ApplicationScoped;
      

      通过

      import javax.faces.bean.ApplicationScoped;
      

    与具体问题无关,如果 bean 没有在任何 JSF 工件中使用,您最好使用 @Singleton @Startup EJB 代替。此外,在 JSF 托管 bean 中包含 @PersistenceContext 是一种设计味道。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-25
      • 2012-09-26
      • 2015-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-01
      相关资源
      最近更新 更多