Struts2 后台Action接收POST请求JSON数据及其实现解析

一.数据表单

<form id="messagePrioritySetting" name="messagePrioritySetting" method='post'>

	<table class="table_gry" >
		<tr>
			<td width="50" height=22 class="column1">
				<span>序号</span>
			</td>
			<td width="100" height=22 class="column1">
				<span>消息类型</span>
			</td>
			<td width="50" height=22 class="column1">
				<span>优先级</span>
			</td>
			<td width="100" height=22 class="column1">
				<span>是否默认展开</span>
			</td>
		</tr>
		<s:if test="#request.resultlist!=null">
		  <tbody>
			<s:iterator id="re" value="#request.resultlist" status="status">
				<tr id="${ re.id}" name="${ re.id}" >
					<td height="30" width="90px">
						<input  type="hidden" name="id" value="${ re.id}" />
						${status.index+1}
					</td>  
					<td height="30" width="270">
						${re.messageTypeValue }
					</td>
					<td id="priorityLevel" title="单击修改优先级别!"  class="selected" 
						style="width: 120px" >
					   ${re.priorityLevel }
					</td>
					<td height="30" width="20">
						<select style="width:65px;" id="isPushed" name="expandStatus">
							<c:if test="${re.expandStatus == '0'}">  
								<option value="0" selected="selected">
									是
								</option>
								<option value="1">
									否
								</option>
							</c:if>
							<c:if test="${re.expandStatus == '1'}">  
								<option value="0" >
									是
								</option>
								<option value="1" selected="selected">
									否
								</option>
							</c:if>
						</select>
					</td>
				</tr>
			</s:iterator>
		  </tbody>
		</s:if>
	</table>
	</div>
	&nbsp;
	<div align="center">
		<button class="btn_handle" onclick="saveOrUpdate()">提交</button>
	</div>
</form>

二.将整个表单中的数据封装成json格式

function saveOrUpdate(){
        
		//返回json数组
		var formData = $('#messagePrioritySetting').serializeArray();
		// 获得json表单的对象  此方法在IE中不支持
		var jsonObject = $('#messagePrioritySetting').serializeJSON(); 
		// 把json对象转成字符串
		var jsonString = JSON.stringify(jsonObject)
		
		var tableData={"menu":[ ]};
		var arr =  $("table tr");
		for(var i = 1; i < arr.length; i ++){    
			var id = $(arr[i]).find('td').eq(0).children("[type='hidden']").val();
			var messageTypeValue = $(arr[i]).find('td').eq(1).text();
			var priorityLevel = $(arr[i]).find('td').eq(2).text();
			var expandStatus = $(arr[i]).find('td').eq(3).find
								("select option:checked").text();
			var expandStatusNum = "";
			if($.trim(expandStatus) ===  "是"){
				expandStatus = "0";
			}else{
				expandStatus = "1";
			} 
            // 获得字符串去掉空格
			$.trim(id);
			$.trim(messageTypeValue);
			$.trim(priorityLevel);
			$.trim(expandStatus);
            // 封装成json格式,一个json对象,就是表格中一条数据
			var aMenu={ 
					"id":id,
					"messageTypeValue":messageTypeValue,
					"priorityLevel":priorityLevel,	
					"expandStatus":expandStatus	
				};
			tableData.menu.push(aMenu);
		}
		/*
		{"menu":[{"id":"12dds","messageTypeValue":"NNQ信息 ","expandStatus":"1"},	
				 {"id":"sad11","messageTypeValue":"LSQ信息 ","expandStatus":"0"}	
		]}
		*/
        // 转成字符串
		var submitData = JSON.stringify(tableData);
		
	   $.ajax({
			url:"${pageContext.request.contextPath }/messageAction_
					messageSettingAll.action",
			type:"POST",
			data:submitData,
			contentType:"application/json",  //缺失会出现URL编码,无法转成json对象
			success: function (result) {
				alert("设置成功!");
			  },
			  error: function () {
				  alert("设置失败!");
			  }
		});
	}

三.后台对前端传递的json数据进行接收

public void messageSettingAll() throws IOException{
     String mpsStr = getRequestPostData(request);
	// 转化为json对象
    JSONObject mpsObject = JSONObject.parseObject(mpsStr);
	// 通过key获取value
    String jsonString = mpsObject.getString("menu");
	// 转化为实体类对象
    List<MessagePushSetting> messagePushSettingList = JSON.parseArray(jsonString,
 	MessagePushSetting.class);

}

   //解析请求的Json数据
    private String getRequestPostData(HttpServletRequest request) throws IOException {
        int contentLength = request.getContentLength();
        if(contentLength<0){
            return null;
        }
        byte buffer[] = new byte[contentLength];
        for (int i = 0; i < contentLength;) {
            int len = request.getInputStream().read(buffer, i, contentLength - i);
            if (len == -1) {
                break;
            }
            i += len;
        }
        return new String(buffer, "utf-8");
    }

猜你喜欢

转载自blog.csdn.net/m0_38068812/article/details/82784111