S2SH框架session存值问题,在线
小弟Action中有代码如下:其中list1经过测试 有值存在!
List<ProductInfo> list=new ArrayList<ProductInfo>();
ProductInfo info= pbiz.searchProductId(this.getPid());
List<ProductInfo> list1=new ArrayList<ProductInfo>();
try {
if (session.getAttribute("InfoList") != null) {
list1=(List<ProductInfo>)session.getAttribute("InfoList");
list1.add(info);
session.setAttribute("InfoList", list1);
return "car";
}else{
list1.add(info);
session.setAttribute("InfoList", list1);
}
} catch (Exception e) {
list1.add(info);
session.setAttribute("InfoList", list1); //第121行 return "car";
}
return "error";
报错信息如下:空异常
File: com/babasport/action/ProductAction.java
Line number: 121
--------------------------------------------
Stacktraces
java.lang.NullPointerException com.babasport.action.ProductAction.showCar(ProductAction.java:121)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
------解决方案--------------------你说session存值问题,是不是有点误导,你的异常都是些反射的异常信息;
return "car";看下配置正确吗?映射到了正确的action方法上去;
------解决方案--------------------struts的action配置的是不是spring中的名称 如果在spring中配置了action,而struts不是找这个名称的话,会丢失action出现nullpoint
------解决方案--------------------
ssh中session的获取方式是map类型的
Map session=(Map)ActionContext.getActionContext.getSeesion();
往里面放值用
session.put("key",value);
假如value是list类型的那么取值得用
<s:iterator id="ites" value="#session.key">
<s:property value="#ites.属性"></s:property>
</s:iterator>
如果是对象类型的
<s:iterator id="ites" value="#session.key">
<s:property value="#ites"></s:property>
</s:iterator>
------解决方案--------------------
试着从以下二种方法获取SESSION试试:
1:实现 ServletRequestAware接口拿到 request,然后request.getSession();
2:org.apache.struts2.ServletActionContext.getRequest().getSession();
------解决方案--------------------没看明白啥意思 不过对于struts2 session存值问题我的方法是:
往session里放值ActionContext.getContext().getSession().put("name",value);
往session里取值ActionContext.getContext().getSession().get("name");
------解决方案--------------------