0

我有一个具有 FacesValidator 的 Web 项目,该验证器需要访问 EJB 服务来验证记录是否存在。不幸的是,我无法注入我的企业 bean,因为验证器不是托管 bean,所以我试图通过 InitialContext 访问它。我尝试了与http://docs.oracle.com/javaee/6/tutorial/doc/gipjf.html不同的组合,但失败了。

有效的是这种格式:

java:global/myProject-ear-1.0.0/myProject/MyService!com.czetsuya.myProject.service.membership.MyService,

我的问题是可以简化吗?好像太长了

谢谢,
czetsuya

4

1 回答 1

4

查看服务器日志。有点像样的 EJB 容器(至少 Glassfish 3 和 JBoss 6/7 是这样),在 EJB 部署步骤期间记录 EJB 的所有可用 JNDI 名称。如果验证器已正确放入 WAR 并且 EJB 具有@Local接口,那么最短的 JNDI 名称将是java:app在您的情况下应该是java:app/myProject/MyService.

一个完全不同的替代方案是将验证器改为 JSF 或 CDI 托管 bean,这样您就可以只使用@EJB注释。

@ManagedBean // Or @Named.
@ApplicationScoped // Provided that the instance doesn't have any state.
public class MyValidator implements Validator {

    @EJB
    private MyService myService;

    // ...
}

binding并通过而不是引用它validatorId

<f:validator binding="#{myValidator}" />

请注意,从 JSF 2.2 开始,您应该能够注入@EJB( @FacesValidatorand @FacesConverter)。

也可以看看:

于 2012-11-25T12:09:30.030 回答