struts2返回json数据
前几天想要做一个校验用户名是否已被占用的功能,用jq的ajax,jq没有什么问题,代码贴在下面:
- $.ajax({
- type : "GET",
- //url : "usernameCheck",
- url : "jsp/usernameCheck.jsp",
- data : "username=" + str,
- dataType : "json",
- success : function(result) {
- if (result.exist == true) {
- usernameNotExist = false;
- alert("用户名已存在,请重新输入!");
- } else {
- usernameNotExist = true;
- }
- },
- error : function() {
- alert("用户名校验失败,请重试!");
- }
- });
后台开始选择了较为简单的jsp页面的方式(具体不知道应该怎么表述,与之相对应的是struts2,之所以选择简单的方式也是为了能完成任务)。
做个简单的jsp页面还是比较简单的:
- <%@ page language="java" import="java.util.*"
- import="com.homework.service.UserService" pageEncoding="ISO-8859-1"%>
- <%
- UserService userService = new UserService();
- String username = (String) request.getParameter("username");
- if (username != null) {
- if (!username.isEmpty()) {
- boolean result = userService.usernameCheck(username);
- if (result) {
- response.setContentType("application/json");
- response.getWriter().write("{\"exist\":true}");
- } else {
- response.setContentType("application/json");
- response.getWriter().write("{\"exist\":false}");
- }
- } else {
- response.getWriter().write("error");
- }
- } else {
- response.getWriter().write("error");
- }
- %>
这里不得不感叹一下jsp返回json的方便之处,和之前学习的.net mvc一样(return Json(data);)一样简单高效,下面对比下struts2,有必要说明的是:在能够完成任务的前提下,查阅资料后我总结了一个简单可行的方式:
先看下struts.xml的配置:
- <package name="json" extends="json-default" >
- <action name="usernameCheck" class="com.homework.action.UsernameCheckAction">
- <result type="json">
- <param name="root">dataMap</param>
- </result>
- </action>
- </package>
com.homework.action.UsernameCheckAction这个action的代码参考了很多代码,部分用到了net.sf.json.JSONObject这个类,但是需要导入很多jar包,而且后来也出现了其他问题,我就不想再用了。。。还有一种就是有位网友提供的这个方法,遗憾的是底层原理不是都明白:
- package com.homework.action;
- import java.util.HashMap;
- import java.util.Map;
- import com.homework.service.UserService;
- import javax.servlet.http.HttpServletRequest;
- //import net.sf.json.JSONObject;
- import org.apache.struts2.interceptor.ServletRequestAware;
- import com.opensymphony.xwork2.ActionSupport;
- /**
- * 使用ajax验证用户名
- *
- * @return SUCCESS
- */
- public class UsernameCheckAction extends ActionSupport implements
- ServletRequestAware {
- private static final long serialVersionUID = 1L;
- private HttpServletRequest request;
- private Map<String, Object> dataMap;
- public Map<String, Object> getDataMap() {
- return dataMap;
- }
- public void setServletRequest(HttpServletRequest arg0) {
- this.request = arg0;
- }
- public String execute() {
- UserService userService = new UserService();
- try {
- dataMap = new HashMap<String, Object>();
- String username = request.getParameter("username");
- if (username != null) {
- if (!username.isEmpty()) {
- boolean exist = userService.usernameCheck(username);
- if (exist) {
- dataMap.put("exist", true);
- } else {
- dataMap.put("exist", false);
- }
- }
- } else {
- return ERROR;
- }
- // JSONObject json = JSONObject.fromObject(map);
- // result = json.toString();
- } catch (Exception e) {
- e.printStackTrace();
- }
- return SUCCESS;
- }
- }
经测试工作正常。
我在学习struts2时常和.net mvc做比较,总觉得.net比较简单高效,再举个例子,.net mvc的数据校验可以结合entity framework在创建class时,在成员变量前添加[required],既可以实现数据库的not null属性,也可以添加ajax检查用户填写是否为空,简直。。。
不说了,都是泪!都是自己做的选择。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。