是否可以从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);
}
}
}
public void login();
是从一个额外的托管bean调用的,该bean向前端提供用户服务(即登录、注销、创建新用户、显示用户信息)。这个托管bean委托ejb(ServiceUser
)来处理所有必要的用户takss
托管Bean:
BeanUser
@ManagedBean
@SessionScoped
public class BeanUser implements Serializable {
@EJB
private ServiceUser serviceUser;
...
public void login() {
this.serviceUser.login();
}
}
在jsf中,BeanCredentials
中的值eMail
被填充,但我无法访问ejb ServiceUser
中的值。我是否误解了一些注释或概念?
如何访问ejb中的托管bean属性?常见的解决方案是什么?
您可以将这些值作为参数传递给任何EJB方法。
例如,在典型的创建表单中,您使用ManagedBean字段捕获用户的所有输入,然后通过具有这些值的服务调用EJB。如果属性的数量很大,则可以使用java传输对象。
您能确保javax.inject-jar存在于类路径中吗。如果你正在使用这个专家尝试包括
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>