ホームページ >ウェブフロントエンド >jsチュートリアル >jQuery ajax リクエスト Struts アクションで非同期更新サンプルの共有を実装する
この記事は主に、非同期リフレッシュを実現するための Struts アクションをリクエストするための JQuery ajax を紹介しています。興味のある方はぜひ参考にしてください。
この例は、JQuery ajax と struts を使用した小さな例です。この例では、java Util のリストを JSON 形式に変換するために 2 つのメソッドが使用されます。1 つは、jar を変換するために使用されます。 2 番目の方法は、Goole の gson-2.1.jar を使用して変換することです。必要に応じて、両方の jar パッケージをインポートします。さて、本題に入りましょう
ステップ 1: 関連する jar パッケージをインポートする この例では、json-lib.jar と gson-2.1.jar を自由に選択できます。テストのために両方の jar パッケージ変換方法が使用されたため、それらをすべてここにインポートする必要があります。
ステップ 2: web.xml を構成する
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.php.cn/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <display-name></display-name> <!-- 声明Struts2的前端控制器 --> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 声明Spring的ContextListener,负责上下文一加载立即创建BeanFactory --> <context-param> <!-- 若applicationContext.xml没有放在WEB-INF下或者不叫这个名字,必需声明此参数 --> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> </web-app>
ステップ 3: 新しい struts.xml を作成し、デフォルトの管理者/WEB-INF/index.jsp にジャンプします
<?xml version="1.0" encoding="UTF-8" ?> <!-- <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> --> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://www.yxccc.com/news/"> <struts> <package name="bg" namespace="/" extends="struts-default"> <default-action-ref name="index"/> <!-- =================基础跳转====================== --> <action name="index"> <result>/WEB-INF/index.jsp</result> </action> </package> </struts>
ステップ4 : AjaxRequestAction.java ファイルを記述します。ここでは 2 つのリクエストが行われます。1 つは文字列を直接リクエストするもので、もう 1 つは配列形式でデータのセットをリクエストするものですが、データは次のように JSON サポート配列に変換する必要があります。
package com.fengqi.action; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletResponse; import net.sf.json.JSONArray; import org.apache.struts2.ServletActionContext; import com.google.gson.Gson; import com.opensymphony.xwork2.ActionSupport; /** * 创建时间:2014-10-24,ajax请求的action样例 */ public class AjaxRequestAction extends ActionSupport{ private String sex; @Override public String execute() throws Exception { return super.execute(); } /** * ajax请求,以json格式的字符串响应请求 */ public void ajaxString(){ System.out.println(sex); //获取相应Response HttpServletResponse response = ServletActionContext.getResponse(); //设置编码方式 response.setCharacterEncoding("UTF-8"); try { if(sex.equals("nan")){ response.getWriter().write("我是男的"); }else if(sex.equals("nv")){ response.getWriter().write("我是女的"); }else{ response.getWriter().write("男女都不是"); } //将数据写到页面中 } catch (IOException e) { e.printStackTrace(); } } /** * ajax请求,以list的形式响应请求,主要这里的list并不是Util的List,而是经过转换成指出json格式的List */ public void ajaxList(){ List<Object> list = new ArrayList<Object>(); list.add("张三"); list.add("李四"); //第一种方法:利用json-lib包中的JSONArray将List转换成JSONArray各式。 JSONArray jsonArray = JSONArray.fromObject(list); //第二周方法:利用goole的json包将List转换成Json对象。 Gson gson = new Gson(); String gsonList = gson.toJson(list); //获取相应Response HttpServletResponse response = ServletActionContext.getResponse(); //设置编码方式 response.setCharacterEncoding("UTF-8"); try { //将数据写到页面中 response.getWriter().println(jsonArray); } catch (IOException e) { e.printStackTrace(); } } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } }
ステップ 5: struts.xml ファイルを更新し、AjaxRequestAction.java のアクセス パスを構成し、次のコードを追加します
<package name="ajax" namespace="/ajax" extends="struts-default"> <!-- =================ajax请求跳转====================== --> <action name="ajax_*" class="com.fengqi.action.AjaxRequestAction" method="ajax{1}"> </action> </package>
struts.xml の最終的な完全なファイルは
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://www.yxccc.com"> <struts> <package name="bg" namespace="/admin" extends="struts-default"> <default-action-ref name="index"/> <!-- =================基础跳转====================== --> <action name="index"> <result>/WEB-INF/index.jsp</result> </action> </package> <package name="ajax" namespace="/ajax" extends="struts-default"> <!-- =================ajax请求跳转====================== --> <action name="ajax_*" class="com.fengqi.action.AjaxRequestAction" method="ajax{1}"> </action> </package> </struts>
ステップ 6: index.jsp ファイルを書き込みます。ここでは 2 つのリクエストが行われます。1 つは文字列を直接リクエストするもので、もう 1 つは配列形式でデータのセットをリクエストするものですが、データは次のように変換する必要があります。以下で詳しく説明するように、JSON でサポートされる配列
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>" rel="external nofollow" > <title>ajax异步刷新样例测试</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <link href="http://www.yxccc.com/css/css.css" rel="stylesheet" type="text/css" /> <script src="js/jquery-2.1.1.min.js"></script> <script type="text/javascript"> $(document).ready(function() { $("#hh1").click(function(){ $.ajax({ url:"ajax/ajax_String",//请求url data:{sex:$("#txt1").val()}, success:function(data){//请求返回的数据 $("p").html(data);//将数据打印到页面的p中 } }); }); $("#hh2").click(function() { $.ajax({ url: "ajax/ajax_List",//请求url http://www.yxccc.com //cache: false, type: "POST", //请求头,这里是post datatype: 'json', //请求数据各式,这里是json格式 success: function(data,status){ data = $.parseJSON(data); //将字符串格式的数据转换成json对象 //这里将option元素移除是考虑到如果在页面不刷新的情况下多次请求,会产生数据累加,不符合业务需求,因此需先删除在增加元素。 $("option").remove(); $("select").append("<option>请选择</option>");//在select元素下添加option子元素。 $(data).each(function(i){ //遍历请求相应的data数据 $("select").append("<option>"+data[i]+"</option>"); }) } }); }); }); </script> </head> <body> <br> <h2 align="center">这里是ajax请求Demo,该实例是请求Struts中的action</h2> <br> <button id="hh1">请求返回常规字符串</button> <button id="hh2">请求返回JSON格式的List</button><br><br> <p>这里是p元素</p><br> 请选择性别:<select id="txt1" name="sex"> <option>请选择</option> <option value="nan">男</option> <option value="nv">女</option> </select><br><br> <select> <option>select选择</option> </select> </body> </html>
このような単純な ajax リクエストが完了しました。
関連する推奨事項:
php+jQuery+Ajax で単純に非同期ページを実装するrefresh_php example
JQuery に基づいて非同期リフレッシュを実装するコード (再版)_jquery
以上がjQuery ajax リクエスト Struts アクションで非同期更新サンプルの共有を実装するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。