今天做项目遇到要从一个action里面重定向到另一个action里面传递Map类型的值.可是我无论怎么配置都传递不过去.后来,我把信息序列化为json格式的字符串传递过去.在另一个action里面再将此json字符串序列化为一个map即可以.
代码如下:
首先:我写了一个工具方法,此方法接收一个json对象和一个key(错误信息的key),返回序列化后的字符串.
/**
* 错误信息转换的方法.用于传递错误信息到初始化注册页面
* @description
* @author 吕兵阳
* @param obj JSON对象
* @param key 错误信息的key
* @return Json格式的字符串
*/
public String convertJson(JSONObject obj,String key){
obj.put(key, getFieldErrors().get(key).get(0));
return obj.toJSONString();
}
这个是struts2的验证方法:
if(user.getName()==null||"".equals(user.getName().trim())){
addFieldError("name", "用户名不能为空!");
errorMsg=convertJson(obj, "name");
return;
}
这个是Struts2的配置文件
<!-- 会员信息 -->
<action name="*TUser" class="tuserAction" method="{1}">
<result name="addUser_success">page/success.jsp</result>
<result name="doAdd_error">page/saleRegister.jsp</result>
<result name="input" type="redirectAction">
<param name="actionName">initInit.action</param>
<param name="errorMsg">${errorMsg}</param>
</result>
</action>
这个就是要接收错误信息的那个action
/**
* 初始化数据,加载企业类型和省份下拉框的值
* @description
* @author 吕兵阳
* @return
* @throws Exception
*/
public String init() throws Exception {
logger.debug("----------------init方法begin---------------");
facttypeList = tfacttypeService.findAllType();
logger.debug("获取到的企业类型信息:"+JSONObject.toJSONString(facttypeList));
errorMsg = new String(errorMsg.getBytes("ISO8859-1"),"UTF-8");
JSONObject obj=JSONObject.parseObject(errorMsg);
String errorKey = obj.keySet().iterator().next();
addFieldError(errorKey, obj.getString(errorKey));
logger.debug("错误传递ok!");
shengList = tshengService.findAllSheng();
logger.debug("获取的省份数量:"+shengList.size());
logger.debug("---------------init方法end----------------");
return SUCCESS;
}