在Java类中注入EJB时,NullPointerException异常
我认为这个问题提高了,因为我没有得到EJB的东西.我的实体有一个服务类,这是@Stateless.当我使用@EJB在我的会话作用域演示模型中使用它,一切都可以.但是现在我想在一个DataModel中使用这个EJB服务,我已经在我的演示文稿模型中被覆盖了:
public class LazyUserDataModel extends LazyDataModel<User> { @EJB private UserService service; @Override public List<User> load(int first,int pageSize,String sortField,SortOrder sortOrder,Map filters) { List<User> users; users= service.findAllUsers(); this.setRowCount(users.size()); return users; } } 在执行时,我在“users = service.findAllUsers()”位置得到一个NullPointerException当我在演示文稿模型中覆盖此DataModel时,同样的工作: @Named @SessionScoped public class UserPM { @EJB private UserService service; private LazyDataModel<User> lazyUsers; public UserPM() { // Don't works //lazyUsers = new LazyUserDataModel(); lazyUsers = new LazyDataModel() { @Override public List<User> load(int first,Map filters) { List<User> users; users = service.findAllUsers(); this.setRowCount(users .size()); return users ; } }; } } 是否可以在普通Java类中注入EJB?我该怎么做,我不必在演示模型中定义DataModel? 谢谢 解决方法
EJB只注入受管Bean. bean由一些注入容器管理,例如通过JSF自己的@ManagedBean,CDI的@Named等进行管理.您甚至可以在另一个EJB中注入EJB.您不能在非托管类中注入EJB(但是您可以手动从JNDI抓取它,但这很简单).
您基本上有以下选项: >在您的托管bean的@PostConstruct中,构造数据模型,从而将结果作为参数传递(注意,这也是标准数据模型如 @PostConstruct public void init() { lazyUsers = new LazyUserDataModel(service.findAllUsers()); } >使LazyUserDataModel抽象,您可以要求用户提供结果. public abstract class LazyUserDataModel extends LazyDataModel<User> { @Override public List<User> load(int first,Map filters) { List<User> users; users = findAllUsers(); this.setRowCount(users.size()); return users ; } public abstract List<User> findAllUsers(); } 这样匿名的类就会减少 lazyUsers = new LazyUserDataModel() { @Override public List<User> findAllUsers() { return service.findAllUsers(); } }; >使LazyUserDataModel也是托管的bean,并注入它. @Named @RequestScoped public class LazyUserDataModel extends LazyDataModel<User> { // ... } 同 @Inject private LazyUserDataModel lazyUsers; >像你想象的那样创建一个完整的匿名实例. 与具体问题无关,没有一个可以提供所有记录的LazyDataModel.它的意图在于,它可以根据当前的分页状态为您提供仅使用SQL权限(LIMIT,OFFSET和朋友)的子集或记录,以便您不需要在Java内存中拥有数百个甚至不是数千条记录,只有十个左右.换句话说,如果你从来没有使用load()方法的first和/或pageSize参数,那么你最有可能完全错误. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 为什么此代码段不会出现Java Tutorials文档中所述
- java – Cron Job in play framework 2.0
- JSP Out.print()方法:输出数据到JSP页面
- java – Spring Boot和Thymeleaf 3.0.0.RELEASE集
- java – 从string和int创建哈希
- 使用OpenSAML在Java中使用SAML 2.0解密加密断言
- java – ListView Viewholder复选框状态
- java – 用基本类型验证多个instanceof的最佳方法
- java – Android和GSON抛出No-Args构造函数未找到
- java – NullPointerException当尝试运行.jar文件