动作由Struts容器管理。
EntityManager由CDI Container管理。您可以将其注入CDI托管对象(EJB容器中的EJB,CDI托管Bean,Servlet,ecc …),但不能将其注入Actions中。
您需要使用Struts2-CDI-Plugin或执行查找来获取它。您甚至不应将其注入到Actions BTW中,最好使用业务组件(例如EJB)并对此进行查找。
如果不使用CDI插件(例如,由于使用Spring插件),该CDIUtil.java罗布Veldpaus是为这个完美的。
示例EJB:
@Statelesspublic class MyEjb{ @PersistenceContext(unitName="primary") EntityManager em; public Foo find(long id){ return em.find(Foo.class, id); }}动作示例:
public class RegistrationAction extends ActionSupport implements SessionAware,Preparable ,ModelDriven { public String execute(){ MyEjb ejb = new CdiUtil().lookup(MyEjb.class); System.out.println(ejb.find(1L)); return SUCCESS; } }


