【SSH项目实战】国税协同平台-31.我要投诉功能1

简介:
我们之前完成了投诉回复和保存功能,这次我们将要完成历史受理信息的显示

以及数据回显功能,当然还有用户编写投诉信息的入口,我们这次继续。

可以注意到,在deilUI.jsp上我们之前的投诉人信息显示,不管是匿名还是不匿名,投诉人的姓名、手机号码都是显示出来的:
<tr>
    <td class="tdBg">投诉人姓名:</td>
    <td><s:property value="complain.compName"/></td>
</tr>
<tr>
     <td class="tdBg">投诉人手机:</td>
     <td>
     <s:property value="complain.compMobile"/>
     </td>
</tr>
我们要做到匿名的用户名称不显示,手机第4-7位不显示(变为*号),所以,我们要在deilUI.jsp上修改这一块,先去判断用户是否匿名状态, 不匿名就直接显示用户手机号码,如果匿名了,在手机号码位数合理的情况下,隐藏第5-8位:
<tr>
    <td class="tdBg">投诉人姓名:</td>
    <td><s:if test="!complain.isNm"><s:property value="complain.compName"/></s:if></td>
</tr>
<tr>
    <td class="tdBg">投诉人手机:</td>
    <td>
    <s:if test="!complain.isNm">
    <s:property value="complain.compMobile"/>
    </s:if><s:elseif test="%{complain.compMobile.length() > 10}">
    <s:property value="%{complain.compMobile.substring(0,3) + '****' + complain.compMobile.substring(7,11)}"/>
    </s:elseif>
    </td>
</tr>

这样在投诉人匿名的时候就不会显示投诉人的姓名和完整的手机号码了。

接下来我们来添加历史回复信息显示的功能。这是我们什么都没有加时的jsp界面上的静态数据:
<tr>
    <td colspan="2">
    	<fieldset style="border: solid 1px #c0c0c0;margin-top:5px;">
    	<legend style="color:green;font-weight:bold;">回复 </legend>
			<div style="width:100%; text-align:center;color:#ccc;maring-top:5px;">
			回复部门:xxx  
			回复人:xxx  
			回复时间:xxx
			</div>
			<div style="width:100%;maring-top:10px;font-size:13px;padding-left:5px;">
			xxx
			</div>
		</fieldset>
    </td>
</tr>

因为我们每次进入恢复投诉界面的时候,已经进行了“懒加载”,我们的历史回复信息也是会加载进来的,这个时候我们只要使用struts去遍历它就可以了。修改后的这一块的代码为:
<tr>
    <td colspan="2">
      <s:iterator value="complain.complainReplies" status="st">
    	<fieldset style="border: solid 1px #c0c0c0;margin-top:5px;">
    	<legend style="color:green;font-weight:bold;">回复<s:property value="#st.count"/> </legend>
			<div style="width:100%; text-align:center;color:#ccc;maring-top:5px;">
			回复部门:<s:property value="replyDept"/>  
			回复人:<s:property value="replyer"/>  
			回复时间:<s:date name="replyTime" format="yyyy-MM-dd HH:mm"/>
			</div>
			<div style="width:100%;maring-top:10px;font-size:13px;padding-left:5px;">
			<s:property value="replyContent"/>
			</div>
		</fieldset>
	  </s:iterator>
    </td>
</tr>

测试,我们点击之前我们回复过的投诉信息,然后在历史回复栏中显示:


这样我们就完成了历史受理信息的显示。

我们接下来完成投诉入口、分页与数据回显的功能
先来搞定投诉入口,我们的普通用户上网需要投诉,就直接在“工作主页”中去投诉即可:

我们的投诉信息保存不能写在Complain的Action中,因为普通用户可能没有操作权限,所以我们要将这个方法写在公共的Action中,即系统主界面的Action------HomeAction:
package cn.edu.hpu.tax.core.action;

import com.opensymphony.xwork2.ActionSupport;

public class HomeAction extends ActionSupport{

	//跳转到首页
	public String execute(){
		
		return "home";
	}
	
}

我们在HomeAction中添加跳转至投诉信息填写页面的方法:
package cn.edu.hpu.tax.core.action;

import com.opensymphony.xwork2.ActionSupport;

public class HomeAction extends ActionSupport{

	//跳转到首页
	public String execute(){
		
		return "home";
	}
	
	//跳转到投诉信息编辑页面
	public String complainAddUI(){
		return "complainAddUI";
	}
}

然后在主页“我要投诉”地方加上超链接:
<div class="lc_grzxbt">
        <h1>我的投诉</h1>
        <div style="float:right;padding-top:3px;">
        <s:a action="home_complainAddUI"namespace="/sys" target="_blank">
        我要投诉</s:a>  
        </div>
</div>

然后拿到美工给我们的投诉信息编辑页面:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    pageContext.setAttribute("basePath", request.getContextPath()+"/") ;
%>
<html>
<head>
    <%@include file="/common/header.jsp"%>
    <title>我要投诉</title>
    <script type="text/javascript" charset="utf-8" src="${basePath }js/ueditor/ueditor.config.js"></script>
    <script type="text/javascript" charset="utf-8" src="${basePath }js/ueditor/ueditor.all.min.js"> </script>
    <script type="text/javascript" charset="utf-8" src="${basePath }js/ueditor/lang/zh-cn/zh-cn.js"></script>


    <script>
   		window.UEDITOR_HOME_URL = "${basePath }js/ueditor/";
    	var ue = UE.getEditor('editor');
    	
    	//根据部门查询该部门下的用户列表
    	function doSelectDept(){
    	
	}
    </script>
    
</head>
<body>
<form id="form" name="form" action="" method="post" enctype="multipart/form-data">
    <div class="vp_d_1">
        <div style="width:1%;float:left;">    </div>
        <div class="vp_d_1_1">
            <div class="content_info">
    <div class="c_crumbs"><div><b></b><strong>工作主页</strong> - 我要投诉</div></div>
    <div class="tableH2">我要投诉</div>
    <table id="baseInfo" width="100%" align="center" class="list" border="0" cellpadding="0" cellspacing="0"  >
        <tr>
            <td class="tdBg" width="250px">投诉标题:</td>
            <td><s:textfield name="comp.compTitle"/></td>
        </tr>
        <tr>
            <td class="tdBg">被投诉人部门:</td>
            <td><s:select id="toCompDept" name="user.dept" list="#{'':'请选择','部门A':'部门A','部门B':'部门B' }" onchange="doSelectDept()"/></td>
        </tr>
        <tr>
            <td class="tdBg">被投诉人姓名:</td>
            <td>
            	 
            </td>
        </tr>
        <tr>
            <td class="tdBg">投诉内容:</td>
            <td><s:textarea id="editor" name="comp.compContent" cssStyle="width:90%;height:160px;" /></td>
        </tr>
        <tr>
            <td class="tdBg">是否匿名投诉:</td>
            <td><s:radio name="comp.isNm" list="#{'0':'非匿名投诉','1':'匿名投诉' }" value="0"/></td>
        </tr>
       
    </table>


    <div class="tc mt20">
        <input type="button" class="btnB2" value="保存" />
            
        <input type="button"  onclick="javascript:window.close()" class="btnB2" value="关闭" />
    </div>
    </div></div>
    <div style="width:1%;float:left;">    </div>
    </div>
</form>
</body>
</html>

点击“我要投诉”之后的效果:


可以看到,我们有个最重要的功能,就是投诉部门选择之后就会有各个部门的人显示在“投诉人”这个框框中。
显然,要完成这个功能,我们就需要写一个js方法,利用ajax根据部门名称去查询该部门下的所有人员姓名,然后显示在“投诉人”这个框框中。

我们在doSelectDept()方法中去完成这个功能:
//根据部门查询该部门下的用户列表
function doSelectDept(){
	//1、获取部门
	var dept = $("#toCompDept option:selected").val();
	if(dept != ""){
		//2、根据部门查询列表
		$.ajax({
			url:"${basePath}sys/home_getUserJson.action",
			data:{"dept":dept},
			type:"post",
			dataType:"json",//返回数据类型
			success: function(data){
				//2.1、将用户列表设置到被投诉人下拉框中
				if(data != null && data != "" && data != undefined){
					if("success" == data.msg){
						var toCompName = $("#toCompName");
						toCompName.empty();
						//使用each标签将userList的数据遍历出来
						$.each(data.userList, function(index, user){
							toCompName.append("<option value='" + user.name + "'>" + user.name + "</option>");
						});
					} else {alert("获取被投诉人列表失败!");}
				} else {
					alert("获取被投诉人列表失败!");
				}
			},
			error:function(){alert("获取被投诉人列表失败!");}
		});
	} else {
		//清空被投诉人列表下拉框
		$("#toCompName").empty();
	}
}

然后我们在“投诉人”这个框中去显示我们获取的该部门的人员列表:
<tr>
    <td class="tdBg">被投诉人姓名:</td>
    <td>
    	<select id="toCompName" name="comp.toCompName">
    	</select>
    </td>
</tr>

然后我们在homeAction中去完成我们ajax方法中的getUserJson方法:
public void getUserJson(){
	try {
		//1.获取部门
		String dept = ServletActionContext.getRequest()
				.getParameter("dept");
		if (StringUtils.isNotBlank(dept)) {
			//2.根据部门查询用户列表
			QueryHelper queryHelper = new QueryHelper(User.class, "u");
			queryHelper.addCondition("u.dept = ?", dept);
			List<User> 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/json");
			ServletOutputStream outputStream = response.getOutputStream();
			outputStream.write(jso.toString().getBytes("utf-8"));
			outputStream.close();
		}
	} catch (Exception e) {
		e.printStackTrace();
	}
	
}

其中创建json对象我们要引入下列jar包:
commons-beanutils-1.8.0.jar
ezmorph-1.0.6.jar
json-lib-2.3-jdk12.jar


测试:



但是刚刚我们的getUserJson()方法是在没有使用框架的情况下去写的,我们现在使用SSH框架了,可以更简洁的写这个方法,所以我们修改getUserJson()方法:
public String getUserJson2(){
	try {
		//1.获取部门
		String dept = ServletActionContext.getRequest()
				.getParameter("dept");
		if (StringUtils.isNotBlank(dept)) {
			//2.根据部门查询用户列表
			QueryHelper queryHelper = new QueryHelper(User.class, "u");
			queryHelper.addCondition("u.dept = ?", dept);
			return_map=new HashMap<String,Object>();
			return_map.put("msg", "success");
			return_map.put("userList", userService.findObjects(queryHelper));
		}
	} catch (Exception e) {
		e.printStackTrace();
	}
	return SUCCESS;
}

上面的return_map是Map对象,包装要返回的数据类型,要作为HomeAction的全局变量,并添加get和set方法:
private Map<String,Object> return_map;

public Map<String, Object> getReturn_map() {
	return return_map;
}

public void setReturn_map(Map<String, Object> returnMap) {
	return_map = returnMap;
}

然后home-struts.xml配置文件中加以下配置:
<package name="sysHomeJson-action" namespace="/sys" extends="json-default">
	<action name="home_getUserJson2" class="cn.edu.hpu.tax.core.action.HomeAction" method="getUserJson2">
		<result type="json">
			<param name="root">return_map</param>
		</result>
	</action>
</package>

最后别忘记引入 struts2-json-plugin-2.3.20.jar的jar包(用来包装json)

可以看到,在getUserJson2()方法中并没有拼接json串,我们只是利用struts的返回数据包装机制,来使用“<result type="json"></result>”配置使其将Action中返回的数据(值栈中的return_map)包装成json数据。

这种写法充分利用了struts框架返回json数据的优势,而且效果与之前是一样的。

测试之后,结果和之前一样:


下一次我们来完成数值回显和分页以及保存投诉功能。

转载请注明出处:

相关文章
|
8月前
|
Ubuntu 关系型数据库 网络安全
基于docker搭建gitea私服仓库,并开启https访问、ssh访问和邮箱验证通知功能
基于docker搭建gitea私服仓库,并开启https访问、ssh访问和邮箱验证通知功能
718 1
基于docker搭建gitea私服仓库,并开启https访问、ssh访问和邮箱验证通知功能
|
应用服务中间件 Linux Shell
06_Linux基础-NGINX和浏览器、网页的关系-云服务器ssh登陆-安装NGINX-上传网页-压缩命令-xz-gzip-bzip2-zip-tar-配置NGINX服务器支持下载功能-备份脚本
NGINX和浏览器、网页的关系-云服务器ssh登陆-安装NGINX-上传网页-压缩命令-xz-gzip-bzip2-zip-tar-配置NGINX服务器支持下载功能-备份脚本
194 0
06_Linux基础-NGINX和浏览器、网页的关系-云服务器ssh登陆-安装NGINX-上传网页-压缩命令-xz-gzip-bzip2-zip-tar-配置NGINX服务器支持下载功能-备份脚本
|
Java 网络安全
SSH开发项目:实现一组功能的步骤
本文主要讲实现一组功能的步骤
125 0
|
JSON Java 网络安全
SSH框架之SpringMVC文件上传功能代码
版权声明:本文为博主原创文章,如需转载,请标明出处。 https://blog.csdn.net/alan_liuyue/article/details/79327717 简介  ...
1016 0
|
Web App开发 网络协议 网络安全
|
XML 网络安全 数据格式
ssh框架之struts2文件下载功能代码
版权声明:本文为博主原创文章,如需转载,请标明出处。 https://blog.csdn.net/alan_liuyue/article/details/72764335 一、前言   上一篇博客我们了解了ssh框架的springmvc的文件下载功能,它在方法里面并不需要设置返回的http的类型和标题,但也能自动弹出下载框,这就是框架本身的一个优点,封装了原生java的方法。
1011 0
|
JSON Java 程序员
ssh框架之springmvc文件下载功能代码
版权声明:本文为博主原创文章,如需转载,请标明出处。 https://blog.csdn.net/alan_liuyue/article/details/72771926 一、前言   上一篇文章我们了解了,通过Java的io输出流来实现普通的文件下载的功能,是广大程序员在做项目中会普遍使用到的下载文件的方法。
865 0
|
Java 网络安全 Spring
SSH(STRUTS2+SPRING+HIBERNATE)实现文件上传功能
首先是上传页面(upload.jsp) 主要代码如下,其中文件字段按自己所需可以改,但在Action中也必须增减相应字段来接受, [java] view plaincopy         ...
1012 0