在工作主页中的“我要投诉”,点击后弹出,投诉的新增页面,保存后到投诉受理后台管理进行处理。在这边添加时候需要使用到Ajax根据部门名称级联查询部门人员;查询到部门对应的人员列表后,需要将这些人员信息转换为json字符串。

1、HomeAction

(1)按照讲义中写的应该是引入3个jar,分别是:

commons-beanutils-1.8.0.jar

ezmorph-1.0.6.jar

json-lib-2.3-jdk15.jar

我猜测,是为了进行JSON转换,但我写代码并没有成功

public void getUserJson(){		try {			//1、获取部门			String dept = ServletActionContext.getRequest().getParameter("dept");			if(StringUtils.isNotBlank(dept)){				QueryHelper queryHelper = new QueryHelper(User.class, "u");				queryHelper.addCondition("u.dept like ?", "%" + dept);				//2、根据部门查询用户列表				List
 userList = userService.findObjects(queryHelper); //创建Json对象 JSONObject jso = new JSONObject(); jso.put("msg", "success"); jso.accumulate("userList", userList); //3、输出用户列表以json格式字符串形式输出 HttpServletResponse response = ServletActionContext.getResponse(); response.setContentType("text/html"); ServletOutputStream outputStream = response.getOutputStream(); outputStream.write(jso.toString().getBytes("utf-8")); outputStream.close(); } } catch (Exception e) { e.printStackTrace(); } }

之后,我只能用gson来完成,当我想删除添加之前添加的jar包时,却无法删除,因此也没有办法判断这几个jar包对JSON字符串的功能

(2)使用struts2-json-plugin-2.x.jar 包,由struts将action中的变量组装成Json对象。

HomeAction.java

package com.rk.home.action;import java.io.IOException;import java.io.UnsupportedEncodingException;import java.sql.Timestamp;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.annotation.Resource;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServletResponse;import net.sf.json.JSONObject;import org.apache.commons.lang3.StringUtils;import org.apache.struts2.ServletActionContext;import com.google.gson.Gson;import com.google.gson.GsonBuilder;import com.opensymphony.xwork2.Action;import com.opensymphony.xwork2.ActionSupport;import com.rk.core.entity.JsonResult;import com.rk.core.utils.QueryHelper;import com.rk.tax.entity.Complain;import com.rk.tax.entity.User;import com.rk.tax.service.ComplainService;import com.rk.tax.service.UserService;public class HomeAction extends ActionSupport {	private Map
 return_map; private Complain comp; @Resource private UserService userService; @Resource private ComplainService complainService; //跳转到首页 @Override public String execute() throws Exception { return "home"; } //跳转到我要投诉 public String complainAddUI(){ return "complainAddUI"; } public void getUserJson(){ try { //1、获取部门 String dept = ServletActionContext.getRequest().getParameter("dept"); if(StringUtils.isNotBlank(dept)){ QueryHelper queryHelper = new QueryHelper(User.class, "u"); queryHelper.addCondition("u.dept like ?", "%"+dept); // FIXME 这里为什么是%+dept呢? //2、根据部门查询用户列表 List
 userList = userService.findList(queryHelper); //创建Json对象 JsonResult result = new JsonResult(); result.setStatus(JsonResult.SUCCESS); result.setData(userList); Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create(); String strJson = gson.toJson(result); //3、输出用户列表,以JSON格式字符串形式输出 HttpServletResponse response = ServletActionContext.getResponse(); response.setContentType("text/html"); ServletOutputStream outputStream = response.getOutputStream(); outputStream.write(strJson.getBytes("utf-8")); outputStream.close(); } } catch (Exception e) { e.printStackTrace(); } } public String getUserJson2(){ //1、获取部门 String dept = ServletActionContext.getRequest().getParameter("dept"); if(StringUtils.isNotBlank(dept)){ QueryHelper queryHelper = new QueryHelper(User.class, "u"); queryHelper.addCondition("u.dept like ?", "%"+dept); //2、根据部门查询用户列表 return_map = new HashMap
(); return_map.put("status", "success"); return_map.put("data", userService.findList(queryHelper)); } return Action.SUCCESS; } //保存投诉 public void complainAdd(){ try { if(comp != null){ //设置默写投诉状态为 待受理 comp.setState(Complain.COMPLAIN_STATE_UNDONE); comp.setCompTime(new Timestamp(new Date().getTime())); complainService.save(comp); //输出投诉结果 HttpServletResponse response = ServletActionContext.getResponse(); response.setContentType("text/html"); ServletOutputStream outputStream = response.getOutputStream(); outputStream.write("success".getBytes("utf-8")); outputStream.close(); } } catch (Exception e) { e.printStackTrace(); } } public Map
 getReturn_map() { return return_map; } public void setReturn_map(Map
 return_map) { this.return_map = return_map; } public Complain getComp() { return comp; } public void setComp(Complain comp) { this.comp = comp; }}

JsonResult.java

package com.rk.core.entity;import com.google.gson.Gson;import com.google.gson.GsonBuilder;public class JsonResult {	private String status;	private Object data;		public static final String OK = "ok";	public static final String SUCCESS = "success";	public static final String ERROR = "error";		public String getStatus()	{		return status;	}	public void setStatus(String status)	{		this.status = status;	}	public Object getData()	{		return data;	}	public void setData(Object data)	{		this.data = data;	}	@Override	public String toString()	{		//Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();		Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();		return gson.toJson(this);	}}

struts-home.xml

/WEB-INF/jsp/home/home.jsp
/WEB-INF/jsp/home/{1}.jsp
/WEB-INF/jsp/{1}.jsp
/WEB-INF/jsp/loginUI.jsp
/WEB-INF/jsp/noPermissionUI.jsp
home
toLoginUI
return_map

知识点(1):json-default

struts2-json-plugin-2.3.29.jar内有一个struts-plugin.xml文件

在struts-plugin.xml文件中定义了json-default,而它继承自struts-default包。struts-plugin.xml文件内容如下:

    
        
            
            
        
        
            
            
            
            
                
                
                    
input,back,cancel                                
                
                    
    

注意:<pagekage>中的extends="base-default",如果有多个,中间可以用“,”分隔。

<package name=""  extends="json-default,struts-default">

这样的继承,要确保父包里面不能有重复的 action名,要不然,子包不知道 调用那个

2、JSP页面

在主页面home.jsp中添加链接,会在空白页面打开

我要投诉

complainAddUI.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>    <%@include file="/common/header.jsp"%>    我要投诉        
    
    
    
    window.UEDITOR_HOME_URL = "${basePath}/js/ueditor";     window.onload = function(){         var ue = UE.getEditor("editor");     }     //根据部门查询该部门下的用户列表    function doSelectDept(){      //1、获取部门      var dept = $('#toCompDept option:selected').val();      if(dept != ""){      //2、根据部门查询列表      $.ajax({      url:"${basePath}/sys/home_getUserJson2.action",      data:{"dept":dept},      type:"post",      dataType:"json",//返回数据类型      success:function(result){      //2.1、将用户列表设置到被投诉人下拉框中      if(result != null && result != "" && result != undefined){      if("success" == result.status){      var toCompName = $('#toCompName');      toCompName.empty();      $.each(result.data,function(index,user){      toCompName.append("
"+user.name+"");      });      }      else{      alert("获取被投诉人列表失败");      }      }      else{      alert("被投诉人列表似乎不存在");      }      },      error:function(){      alert("获取被投诉人列表:AJAX请求失败!");      }      });      }      else{      //清空被投诉人列表下拉框      $('#toCompName').empty();      }     }     //提交表单    function doSubmit(){ //1、提交表单并保存 $.ajax({ url:"${basePath}/sys/home_complainAdd.action", data:$('#form').serialize(), type:"post", ansy:false, success:function(result){ if(result == "success"){ //2、提示用户投诉成功 alert("投诉成功!"); //3、刷新父窗口 window.opener.parent.location.reload(true); //4、关闭当前窗口 window.close(); } else{ alert("投诉失败!"); } }, error:function(){ alert("投诉:AJAX请求失败"); } });     }    
    
        
            
            
    
工作主页 - 我要投诉
    
我要投诉    
                    
投诉标题:            
                            
被投诉人部门:                        
                                        
被投诉人姓名:                        
                                                     
投诉内容:            
                            
是否匿名投诉:            
                   
    
        
                    
            
        

知识点(1):获取select的值

var dept = $('#toCompDept option:selected').val();

知识点(2):清空、迭代

var toCompName = $('#toCompName');toCompName.empty();$.each(result.data,function(index,user){	toCompName.append("
"+user.name+"");});

知识点(3):原窗口的刷新

window.opener.parent.location.reload(true);

知识点(4):表单元素的序列化

$('#form').serialize()