以下是Action实现的方法,下面只是贴出了Action的实现,代码测试过没问题,但只要运行到设置Session的地方就通不过,但也不报错,通过检测发现设置session时通过IOC方式注入的map形式的session未获取到,也就是getSession得到的是null,所以程序执行不了,看看哪位能看出下面程序问题的指点一下,我找了两天了,对照struts2中的示例也没发现哪里有问题,在此先谢谢了!
public class ManagerAction extends ActionSupport implements SessionAware{
IGxManagerService gxManagerService=null;
private String username = null;
private String password = null;
private Map session;
public void setSession(Map value) {//实现SessionAware中的setSession方法,通过IOC方式注入Session
session = value;
}
public Map getSession() { //获取map形式的session集合
return session;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public GxManager getManagerSessionInfo() {
return (GxManager) getSession().get(WebConstants.WEB_MANAGER_KEY);
}
/**
* <p>
* Store new reference to GxManager Object.
* </p>
*
* @param GxManager
* GxManager object for authenticated GxManager
*/
public void setManagerSessionInfo(GxManager gxManger) {
getSession().put(WebConstants.WEB_MANAGER_KEY, gxManger);
}
public IGxManagerService getGxManagerService() {
return gxManagerService;
}
public void setGxManagerService(IGxManagerService gxManagerService) {
this.gxManagerService = gxManagerService;
}
public String login() {
GxManager gxManager = null;
try {
gxManager = gxManagerService.checkLogin(getUsername(),getPassword());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (gxManager != null) {
setManagerSessionInfo(gxManager); //此处出现问题,检测的结果是调用上面蓝色的getSession时获取到的值为NULL
}
if (hasErrors()) {
return INPUT;
}
return SUCCESS;
}
}
怀疑你覆盖了struts中的拦截器设置,使得session拦截器失效。
能不能帖出struts.xml代码
[code="java"]public GxManager getManagerSessionInfo() {
return (GxManager) getSession().get(WebConstants.WEB_MANAGER_KEY);
} [/code]
怎么感觉有点别扭,一个model的属性注入另一个属性。可以?
SPRING配置文件发来看看
你自己测试一下 调一下getSession()方法,看看session有值吗
没有值 就是SPRING配置文件注入错误,setManagerSessionInfo(gxManager); 这个代码你注释,就不会调用getSession方法了,就算SPRING注入错误,当然也不会报错了,所以还是把配置文件发来看看吧
你配置文件里根本就没有 注入session啊 ,当然是NULL了
你看你这个action里 哪有session的注入?
不是的,需要自己注入
private Map session; 你这里声明的 session找谁去? set get方法都没有super() 那里实现了SessionAware接口?
再说你注入的是GxManagerService类 也不是SessionAware接口啊
另外,struts应该是web层吧,spring才是业务逻辑层吧,是spring来控制反转的吧?两个业务逻辑层?struts怎么将object注入到spring里?
[quote]你配置文件里根本就没有 注入session啊 ,当然是NULL了
你看你这个action里 哪有session的注入?[/quote]
楼上的说法是错误的,只要继承了sessionaware接口的的会自动注入struts session。
将private Map session;
这句话改为private Map session = new HashMap();
试试
还真找不出来