gpt4 book ai didi

java - Struts2 中的有状态 session bean

转载 作者:行者123 更新时间:2023-12-02 04:17:29 25 4
gpt4 key购买 nike

我一直在尝试使用 Struts2 创建一个简单的有状态 session bean,但是每次我重新发送请求并尝试检索之前放入有状态 bean 中的信息时,它都会返回 NULL。我错过了什么吗?

注册后注入(inject)工作正常,但是当我使用操作类中的检索方法发出新请求时,我无法获取 session 信息,因为它返回 null。

那么我该如何实现这一目标呢?

不要注意锁,我放它们只是为了测试其他功能。你可以忽略它们。我重复一下,注入(inject)在执行方法上正常工作

public class Registration extends ActionSupport implements ModelDriven<Account> {
private static final long serialVersionUID = -8930461193700155653L;
private Account account;
private User user;

@Inject // this is the interface implemented by my stateful bean
AccountServiceLocal asl;

@Inject
PassHashInterface phi;

@Inject
UserServiceLocal usl;
private final Lock lock =new ReentrantLock();

@org.apache.struts2.interceptor.validation.SkipValidation
public String retrieve(){
if(asl.getEmail()!=null){ // always null
return "success";
}
return "input";
}
public String execute() throws NoSuchAlgorithmException,
InvalidKeySpecException,
InterruptedException {

user=new User();
user.setEmail(account.getEmail().toString().trim());
System.out.println("in execute");
account.setRole("Regular");
account.setPwd(phi.createHash(account.getPwd()));
/*
* NB. the primary key in Account(AccountId) does not
* Necessary matches the primary key in User(Id)
*/
asl.create(account);
usl.create(user);
lock.unlock();
return "success";
}

@Override
public Account getModel() {
account=new Account();
return account;
}
}

我的struts.xml文件

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.objectFactory.cdi.jndiKey"
value="java:comp/some/weird/BeanManagerReference" />
<package name="default" namespace="/" extends="struts-default">
<action name="register" class="action.Registration"
method="execute">
<result name="success">success.jsp</result>
<result name="input">registration.jsp</result>
</action>
<action name="save" class="action.Registration"
method="retrieve">
<result name="success" >index.jsp</result>
<result name="input" >registration.jsp</result>
</action>
</package>
</struts>

AccountserviceImpl:

@Stateful
public class AccountServiceImpl implements AccountServiceLocal {

@Inject
private AccountDaoLocal adl;
/* (non-Javadoc)
* @see ejb.Business.AccountServiceLocal#create(ejb.Domain.Account)
*/
@Override
public void create(Account a) {
// TODO Auto-generated method stub
System.out.println("in"+this);
adl.createdao(a);
}

/* (non-Javadoc)
* @see ejb.Business.AccountServiceLocal#delete(java.lang.Object)
*/
@Override
public void delete(Object id) {
// TODO Auto-generated method stub

}

/* (non-Javadoc)
* @see ejb.Business.AccountServiceLocal#find(java.lang.Object)
*/
@Override
public Account find(Object id) {
// TODO Auto-generated method stub
return null;
}

/* (non-Javadoc)
* @see ejb.Business.AccountServiceLocal#update(ejb.Domain.Account)
*/
@Override
public void update(Account a) {
// TODO Auto-generated method stub

}

/* (non-Javadoc)
* @see ejb.Business.AccountServiceLocal#findemail(java.lang.Object)
*/
@Override
public List findemail(Object id) {
// TODO Auto-generated method stub

return adl.finddaobyEmail(id);
}

}

AccountServiceLocal:

@Local
public interface AccountServiceLocal {

public void create(Account a);

public void delete(Object id);

public Account find(Object id);

public List<?> findemail(Object id);

public void update(Account a);

}

最佳答案

谢谢你们安德里亚和亚历山大。我使用的是 @Stateful 而不是 @Named @SessionScoped。无论如何,他们两个有什么区别。我使用的教科书使用 @Stateful 来引用有状态 bean。

关于java - Struts2 中的有状态 session bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30316605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com