Struts2实现JSON和Ajax操作(十四)

简介: Struts2实现JSON和Ajax操作(十四)

在网页前后端分离操作的过程中,通过JSON数据进行前后端的传输,利用Ajax进行异步的提交。其重要性就不说了。


一. Struts2 整合 Ajax


一.一 添加整合的Json依赖(Jar包)


20200609122937926.png


将这些Jar包从Struts中找到,然后放置到WEB-INF下的lib包下,添加到path中。


特别不要忘记用struts2-json-plugin-2.3.30.jar包。


以下是关于Struts2比较全的Jar包


20200609122948709.png


一.二 新建UserAction类


package com.yjl.web.action;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.yjl.pojo.User;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
/**
* @author 两个蝴蝶飞
* @version 创建时间:2018年9月14日 下午6:35:10
* 演示json交互的Action
*/
public class UserAction extends ActionSupport implements ModelDriven<User>{
  private static final long serialVersionUID = -4164832837385401186L;
  private static Logger logger=Logger.getLogger(UserAction.class);
  private User user=new User();
  //定义结果,为字符串类型,这个非常重要
  private String result;
  public String getResult() {
    return result;
  }
  public void setResult(String result) {
    this.result = result;
  }
  public User getModel(){
    return user;
  }
  public String register(){
    return SUCCESS;
  }
  /**
   * 返回一个字符串 
   */
  public String register1(){
    logger.info("注册时的名称为:"+user.getName());
                //只是简单的验证,判断一下是否是两个蝴蝶飞
    if("两个蝴蝶飞".equals(user.getName())){
      result="true";
    }else{
      result="false";
    }    
        //得到的是一个字符串
    logger.info("结果为:"+result);
    return "register1";
  }
  /**
   * 返回一个对象字符串
   */
  public String register2(){ 
        //得到的是一个字符串
    User user=new User();
    user.setName("两个蝴蝶飞");
    user.setId(1);
    user.setSex("男");
    //将其转换成Json 字符串
    JSONObject object=JSONObject.fromObject(user);
    result=object.toString();
    logger.info("结果为:"+result);
    return "register2";
  }
  /**
   * 
   * 返回的是一个 List 集合数组 
   */
  public String register3(){ 
    List<User> allList=new ArrayList<User>();
        //得到的是一个字符串
    User user=new User();
    user.setName("两个蝴蝶飞");
    user.setId(1);
    user.setSex("男");
    allList.add(user);
    User user2=new User();
    user2.setName("老蝴蝶");
    user2.setId(2);
    user2.setSex("男");
    allList.add(user2);
    //将其转换成Json 字符串
    JSONArray object=JSONArray.fromObject(allList);
    result=object.toString();
    logger.info("结果为:"+result);
    return "register3";
  }
}


一.三 配置struts.xml文件


<!-- 正常的方法操作 -->
<package name="user" namespace="/" extends="struts-default">
  <action name="User_*" class="com.yjl.web.action.UserAction" method="{1}">
    <result name="success">/WEB-INF/content/success.jsp</result>
  </action>
</package>
<!-- ajax的方法操作 -->
<package name="userAjax" namespace="/" extends="json-default">
  <action name="UserAjax_*" class="com.yjl.web.action.UserAction" method="{1}">
    <!-- 返回类型为json -->
    <result name="{1}" type="json">
        <!-- 参数中name为root,结果为result.与Action中接收结果的值相同 -->
        <param name="root">result</param>
    </result>
  </action>
</package>
<!-- -跳转到页面的 -->
<package name="no" namespace="/" extends="struts-default">
  <action name="*">
    <result>/WEB-INF/content/{1}.jsp</result>
  </action>
</package>


创建两个包,分开写, 一个处理普通的方法,一个处理ajax 方法。


一.四 编写 /content/register.jsp 页面


<body>
  <h3>这是一个注册框架的页面</h3>
  <s:form action="User_register" method="post" namespace="/">
    <s:textfield label="用户名" name="name" id="name"></s:textfield>
    <s:password label="密碼" name="password"></s:password><br>
     <br/>
    <s:submit value="提交"/>
  </s:form>
</body>


一.五 在register.jsp 页面添加脚本


<script src="https://cdn.bootcss.com/jquery/1.10.2/jquery.min.js"></script>
<script>
  $(function() {
    $("#name").blur(function() {
      var value = $(this).val();
      //字符串
      ajaxString(value);
      //单个对象
      ajaxBean(value);
      //对象数据
      ajaxList(value);
    })
  });
  function ajaxString(value) {
    $.ajax({
      url : "/Struts_Ajax/UserAjax_register1.action",
      type : "post",
      data : {
        "name" : value
      },
      dataType : "json",
      async : false,
      success : function(result) {
        //alert(typeof(result)); ==>String
        //1.用JSON去转换这个字符串为json对象
        var obj = JSON.parse(result);
        console.log(obj);
        if (obj) {
          console.log("已经存在");
        } else {
          console.log("未注册");
        }
      }
    });
  }
  function ajaxBean(value) {
    $.ajax({
      url : "/Struts_Ajax/UserAjax_register2.action",
      type : "post",
      data : {
        "name" : value
      },
      dataType : "json",
      async : false,
      success : function(result) {
        //alert(typeof(result)); ==>String
        //1.用JSON去转换这个字符串为json对象
        var obj = JSON.parse(result);
        console.log(obj);
        console.log("姓名是:" + obj.name);
      }
    });
  }
  function ajaxList(value) {
    $.ajax({
      url : "/Struts_Ajax/UserAjax_register3.action",
      type : "post",
      data : {
        "name" : value
      },
      dataType : "json",
      async : false,
      success : function(result) {
        //alert(typeof(result)); ==>String
        //1.用JSON去转换这个字符串为json对象
        var obj = JSON.parse(result);
        console.log(obj);
        $.each(obj, function(idx, item) {
          console.log("姓名是:" + item.name);
        })
      }
    });
  }
</script>


一.六 重启服务器,进行验证


输入网址: http://localhost:8080/Struts_Ajax/register


当输入 两个蝴蝶飞,与后端的名称相同,鼠标离开焦点后


20200414204339543.png


当输入 岳泽霖时,与后端的名称不相同,鼠标离开焦点后


20200414204344502.png

关于JSON的知识,可以参考老蝴蝶以前写的文章: JSON简介及前端简单解析(一)


本章代码链接为


链接:https://pan.baidu.com/s/19gvj_htyq7nUd7M2I-e8Fg 
提取码:l5ve


谢谢您的观看!!!

相关文章
|
1月前
|
JSON 前端开发 JavaScript
|
1月前
|
存储 JSON 安全
【C++ JSON库 json值的创建手段】深入探究C++中JSON对象定位与操作:从引用到回调函数
【C++ JSON库 json值的创建手段】深入探究C++中JSON对象定位与操作:从引用到回调函数
88 0
|
1月前
|
XML JSON 前端开发
Ajax技术【Ajax技术详解、 Ajax 的使用、Ajax请求、 JSON详解、JACKSON 的使用 】(一)-全面详解(学习总结---从入门到深化)
Ajax技术【Ajax技术详解、 Ajax 的使用、Ajax请求、 JSON详解、JACKSON 的使用 】(一)-全面详解(学习总结---从入门到深化)
62 1
|
1月前
|
JSON NoSQL MongoDB
实时计算 Flink版产品使用合集之要将收集到的 MongoDB 数据映射成 JSON 对象而非按字段分割,该怎么操作
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
1月前
|
XML 机器学习/深度学习 JSON
在火狐浏览器调ajax获取json数据时,控制台提示“XML 解析错误:格式不佳”。
在火狐浏览器调ajax获取json数据时,控制台提示“XML 解析错误:格式不佳”。
39 0
在火狐浏览器调ajax获取json数据时,控制台提示“XML 解析错误:格式不佳”。
|
19天前
|
SQL JSON HIVE
数仓高频操作JSON篇
数仓高频操作JSON篇
16 0
|
1月前
|
JSON 前端开发 JavaScript
jQuery ajax读取本地json文件 三级联动下拉框
jQuery ajax读取本地json文件 三级联动下拉框
|
1月前
|
XML JSON 前端开发
Ajax – JSON入门指南
Ajax – JSON入门指南
14 1
|
1月前
|
SQL DataWorks 关系型数据库
DataWorks操作报错合集之DataWorks在同步mysql时报错Code:[Framework-02],mysql里面有个json类型字段,是什么原因导致的
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
49 0
|
1月前
|
JSON 分布式计算 大数据
MaxCompute产品使用合集之大数据计算MaxCompute 要提取JSON字符串中的所有key-value对,我该怎么操作
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。