我怎样才能访问ejb中的托管bean属性?

时间:2014-04-16 10:58:07

标签: java jsf java-ee javabeans

是否可以从ejb访问托管bean属性?我想从托管bean中获取少量值到我的ejb中。托管bean属性由jsf创建,它工作正常,但在我的ejb中,我总是为托管bean属性获取null。

以下是我代码的一些部分:

  

托管Bean: BeanCredentials

@ManagedBean
@RequestScoped
public class BeanCredentials implements Serializable {
    private String eMail;

    public String geteMail() {
        return eMail;
    }

    public void seteMail(String eMail) {
        this.eMail = eMail;
    }    
}
  

EJB: ServiceUser

@Stateful
public class ServiceUser {
    @PersistenceContext(unitName = "...")
    private EntityManager em;

    @Inject
    private BeanCredentials credentials;

    ...

    @Transactional
    public void login() {       
        if(this.credentials.geteMail() == null) { /* Always true */
            System.out.println(true);
        }
    }
}
从另一个托管bean调用

public void login();,该bean为前端提供用户服务(即登录,注销,创建新用户,显示用户信息)。这个托管bean委托ejb(ServiceUser)来处理所有必要的用户权限

  

托管Bean: BeanUser

@ManagedBean
@SessionScoped 
public class BeanUser implements Serializable {
    @EJB
    private ServiceUser serviceUser;

    ...

    public void login() {       
        this.serviceUser.login();
    }
}

来自eMail的值BeanCredentials的jsf已填充,但我无法访问ejb ServiceUser中的值。我是否误解了一些注释或概念?

如何访问ejb中的托管bean属性?什么是常见的解决方案?

2 个答案:

答案 0 :(得分:1)

您可以将值作为参数传递给任何EJB方法。

例如,在典型的创建表单中,您使用ManagedBean字段捕获用户的所有输入,然后通过具有这些值的服务调用EJB。如果属性数量很大,您可以使用java传输对象。

答案 1 :(得分:-1)

您能否确保类路径中存在javax.inject jar。如果你正在使用这个maven尝试包括

<dependency>
  <groupId>javax.inject</groupId>
  <artifactId>javax.inject</artifactId>
  <version>1</version>
</dependency>