日期:2014-05-20  浏览次数:20766 次

初学小白问个Struts2的标签问题
想用Struts2标签实现一个网站的首页,现在不知道怎么把值传到JSP页面上去。

Action代码,很简单的功能,加载页面时把值传过去
private User user;
private Map<Object,Object> map=new HashMap<Object, Object>();

public String toLogin() throws IOException {
user.setName("admin");
user.setPassword("123456");
map.put("test", "aaa");
return SUCCESS;


public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@JSON(name="map")
public Map<Object, Object> getMap() {
return map;
}
public void setMap(Map<Object, Object> map) {
this.map = map;
}

Struts-config.xml配置
 <action name="toLogin" class="com.test.login.action.LoginAction" method="toLogin">
 <result name="success">/WEB-INF/jsp/login/login.jsp</result>
  <result type="json"/>
</action>

JSP页面
<table>     
   <tbody>
           <tr>
<td>
     <s:property value="#map['test']"/>
     <s:property value="user.name"/>
     </td></tr>
     </tbody>
     </table>

第一次执行,提示空指针异常
我把所有和user有关的都注掉
再次执行,得到的是这样的结果
{"map":{"test":"aaa"},"user":null}

请问下空指针是错在哪里了?
而第二次执行时,为什么得到的不是aaa,而是这么复杂的数据


------解决方案--------------------
1、user对象没有初始化。 new User(); 再set属性
2、你的struts.xml里配置的返回格式是json,所以你得到的是json格式的数据:
 <result type="json"/>
------解决方案--------------------
1.你报空指针的原因是你的user是null,你调用user.setName("admin");这一句的时候就已经报空指针了,因为你并没有一个user对象,你声明的全局变量user只是一个用于接收前台数据的对象的引用,并没有实例化。
2.因为你定义了@JSON(name="map"),所以你map中的数据就以JSON的格式返回。

改正:1.把private User user;改成-->private User user=new User();就不会报错了。
            2.把@JSON(name="map")注解去掉数据格式就正常了。