1、首先在SSH包的基础上,另外再导入commons-beanutils.jar、ezmorph-1.0.5.jar、json-lib-2.1-jdk15.jar、struts2-json-plugin-2.1.8.1.jar四个包,我用的是是struts是2.1.8.1版本。
2、在struts的配置文件上,action的包要继承json-default,即由原来的struts-defualt改为json-default
<package name="oparation" namespace="/operation" extends="json-default">
<!-- action -->
<action name="macroInfoAction_*" class="macroInfoAction" method="{1}">
<result type="json"/>
<result name="list">/WEB-INF/jsp/operation/macroInfoAction/list.jsp</result>
<result name="addUI">/WEB-INF/jsp/operation/macroInfoAction/saveUI.jsp</result>
<result name="editUI">/WEB-INF/jsp/operation/macroInfoAction/saveUI.jsp</result>
</action>
</package>
而json-default配置文件在struts2-json-plugin-2.1.8.1.jar包里的struts-plugin中有定义
result中,要使用json的,设置type为json,如果没设置name,则默认为”SUCCESS“
3、配置完后,就可以在action中使用了,如:
public class MacroInfoAction extends OperationBaseAction<MacroInfo> {
/*异步交互信息
{"statusCode":"200", "message":"操作成功",
"navTabId":"navNewsLi", "forwardUrl":"", "callbackType":"closeCurrent"}
*/
private int statusCode ; // 状态码,成功:Json4DWZ.STATUS_CODE_OK,
// 错误:Json4DWZ.STATUS_CODE_ERROR,
// 超时:Json4DWZ.STATUS_CODE_TIMEOUT
private String message ; // 显示信息
private String navTabId; //div的id ,可不填
private String forwardUrl ; //要跳转的页面或Action
private String callbackType ; //选择交互后模式,关闭当前页模式:Json4DWZ.CALLBACK_TYPE_FORWARD,
// 跳转模式: Json4DWZ.CALLBACK_TYPE_FORWARD
@Resource
private MacroInfoService macroInfoService;
/**列表*/
public String list(){
return "list";
}
/**删除*/
public String delete(){
macroInfoService.delete(model.getId());//删除
statusCode = Json4DWZ.STATUS_CODE_OK;
message = "删除操作成功";
navTabId = "macroInfoAction_list";
forwardUrl = "operation/macroInfoAction_list.action?pageNum"+pageNum+"&numPerPage"+numPerPage;
callbackType = Json4DWZ.CALLBACK_TYPE_FORWARD;
return SUCCESS;
}
/**添加页面*/
public String addUI(){
return "addUI";
}
/**添加*/
public String add(){
macroInfoService.save(model);
statusCode = Json4DWZ.STATUS_CODE_OK;
message = "添加操作成功";
navTabId = "macroInfoAction_list";
forwardUrl = "operation/macroInfoAction_list.action?pageNum"+pageNum+"&numPerPage"+numPerPage;
callbackType = Json4DWZ.CALLBACK_TYPE_FORWARD;
return SUCCESS;
}
/**修改页面*/
public String editUI(){
//准备回显数据
MacroInfo macroInfo = macroInfoService.getById(model.getId());
ActionContext.getContext().getValueStack().push(macroInfo);
return "editUI";
}
/**修改*/
public String edit(){
//1、从数据库中获取源对象
MacroInfo macroInfo = macroInfoService.getById(model.getId());
//2、修改要修改的属性
macroInfo.setAgeing(model.getAgeing());
macroInfo.setCategory(model.getCategory());
macroInfo.setApplyTo(model.getApplyTo());
macroInfo.setContent(model.getContent());
macroInfo.setName(model.getName());
macroInfo.setPosttime(model.getPosttime());
macroInfo.setRelation2us(model.getRelation2us());
//3、更新到数据库中
macroInfoService.update(macroInfo);
statusCode = 200;
message = "修改操作成功";
//navTabId = "main";
forwardUrl = "operation/macroInfoAction_list.action";
callbackType = Json4DWZ.CALLBACK_TYPE_FORWARD;
return SUCCESS;
}
//=======================================
public int getStatusCode() {
return statusCode;
}
public void setStatusCode(int statusCode) {
this.statusCode = statusCode;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getNavTabId() {
return navTabId;
}
public void setNavTabId(String navTabId) {
this.navTabId = navTabId;
}
public String getForwardUrl() {
return forwardUrl;
}
public void setForwardUrl(String forwardUrl) {
this.forwardUrl = forwardUrl;
}
public String getCallbackType() {
return callbackType;
}
public void setCallbackType(String callbackType) {
this.callbackType = callbackType;
}
}
类里定义的成员变量,有get方法的,都会自动封装为JSON格式,如果不想封装某个成员变量,则在它的get方法上加@JSON(serialize=false),如下:
@JSON(serialize=false)
public String getCallbackType() {
return callbackType;
}