zoukankan      html  css  js  c++  java
  • struts2返回json数据

    前几天想要做一个校验用户名是否已被占用的功能,用jq的ajax,jq没有什么问题,代码贴在下面:

    [java] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. $.ajax({  
    2.                 type : "GET",  
    3.                 //url : "usernameCheck",  
    4.                 url : "jsp/usernameCheck.jsp",  
    5.                 data : "username=" + str,  
    6.                 dataType : "json",  
    7.                 success : function(result) {  
    8.                     if (result.exist == true) {  
    9.                         usernameNotExist = false;  
    10.                         alert("用户名已存在,请重新输入!");  
    11.   
    12.                     } else {  
    13.                         usernameNotExist = true;  
    14.                     }  
    15.                 },  
    16.                 error : function() {  
    17.                     alert("用户名校验失败,请重试!");  
    18.                 }  
    19.             });  


    后台开始选择了较为简单的jsp页面的方式(具体不知道应该怎么表述,与之相对应的是struts2,之所以选择简单的方式也是为了能完成任务)。

    做个简单的jsp页面还是比较简单的:

    [java] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. <%@ page language="java" import="java.util.*"  
    2.     import="com.homework.service.UserService" pageEncoding="ISO-8859-1"%>  
    3.   
    4. <%  
    5.   
    6.     UserService userService = new UserService();  
    7.     String username = (String) request.getParameter("username");  
    8.     if (username != null) {  
    9.         if (!username.isEmpty()) {  
    10.             boolean result = userService.usernameCheck(username);  
    11.             if (result) {  
    12.                 response.setContentType("application/json");  
    13.                 response.getWriter().write("{"exist":true}");  
    14.             } else {  
    15.                 response.setContentType("application/json");  
    16.                 response.getWriter().write("{"exist":false}");  
    17.             }  
    18.         } else {  
    19.             response.getWriter().write("error");  
    20.         }  
    21.   
    22.     } else {  
    23.         response.getWriter().write("error");  
    24.     }  
    25.       
    26.       
    27. %>  

    这里不得不感叹一下jsp返回json的方便之处,和之前学习的.net mvc一样(return Json(data);)一样简单高效,下面对比下struts2,有必要说明的是:在能够完成任务的前提下,查阅资料后我总结了一个简单可行的方式:

    先看下struts.xml的配置:

    [java] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1.       
    2. <package name="json" extends="json-default" >  
    3.         <action name="usernameCheck" class="com.homework.action.UsernameCheckAction">  
    4.             <result type="json">  
    5.                 <param name="root">dataMap</param>  
    6.             </result>  
    7.         </action>  
    8. </package>  

    com.homework.action.UsernameCheckAction这个action的代码参考了很多代码,部分用到了net.sf.json.JSONObject这个类,但是需要导入很多jar包,而且后来也出现了其他问题,我就不想再用了。。。还有一种就是有位网友提供的这个方法,遗憾的是底层原理不是都明白:

    [java] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. package com.homework.action;  
    2.   
    3. import java.util.HashMap;  
    4. import java.util.Map;  
    5. import com.homework.service.UserService;  
    6. import javax.servlet.http.HttpServletRequest;  
    7. //import net.sf.json.JSONObject;  
    8. import org.apache.struts2.interceptor.ServletRequestAware;  
    9. import com.opensymphony.xwork2.ActionSupport;  
    10.   
    11. /** 
    12.  * 使用ajax验证用户名 
    13.  *  
    14.  * @return SUCCESS 
    15.  */  
    16. public class UsernameCheckAction extends ActionSupport implements  
    17.         ServletRequestAware {  
    18.     private static final long serialVersionUID = 1L;  
    19.   
    20.     private HttpServletRequest request;  
    21.   
    22.     private Map<String, Object> dataMap;  
    23.   
    24.     public Map<String, Object> getDataMap() {  
    25.         return dataMap;  
    26.     }  
    27.   
    28.     public void setServletRequest(HttpServletRequest arg0) {  
    29.         this.request = arg0;  
    30.     }  
    31.   
    32.     public String execute() {  
    33.   
    34.         UserService userService = new UserService();  
    35.         try {  
    36.             dataMap = new HashMap<String, Object>();  
    37.             String username = request.getParameter("username");  
    38.             if (username != null) {  
    39.                 if (!username.isEmpty()) {  
    40.                     boolean exist = userService.usernameCheck(username);  
    41.                     if (exist) {  
    42.                         dataMap.put("exist"true);  
    43.                     } else {  
    44.                         dataMap.put("exist"false);  
    45.                     }  
    46.                 }  
    47.             } else {  
    48.                 return ERROR;  
    49.             }  
    50.             // JSONObject json = JSONObject.fromObject(map);  
    51.             // result = json.toString();  
    52.         } catch (Exception e) {  
    53.             e.printStackTrace();  
    54.         }  
    55.         return SUCCESS;  
    56.     }  
    57.   
    58. }  

    经测试工作正常。

    我在学习struts2时常和.net mvc做比较,总觉得.net比较简单高效,再举个例子,.net mvc的数据校验可以结合entity framework在创建class时,在成员变量前添加[required],既可以实现数据库的not null属性,也可以添加ajax检查用户填写是否为空,简直。。。

    不说了,都是泪!都是自己做的选择。

  • 相关阅读:
    Android配置----adb工具的使用
    Android配置----小米手机通过wifi连接ADB调试Android应用
    Java语法基础(二)----运算符
    Java语法基础(一)----关键字、标识符、常量、变量
    Java学习----Java概述
    nginx配置upstream实现负载均衡
    docker挂载本地目录和数据卷容器
    sublime text 3 配置优化
    sql update set使用case when语句
    mysql表复制create table like和create table as比较
  • 原文地址:https://www.cnblogs.com/chbjaycn/p/3651042.html
Copyright © 2011-2022 走看看