zoukankan      html  css  js  c++  java
  • java ee struts2 + Ajax + jQuery

    View Code 这几天弄了好几天的Struts2上的Ajax+jQuery实现,总算实现了。没有人交流,网上的很多信息都将的不是很明白,至少只是贴了些代码,并没有讲清楚原理。今天我将总结一下我的经验。

    首先struts2 使用JSON需要用到的jar包有:struts2-json-plugin-2.2.1.jar、ezmorph-1.0.6.jar、json-lib-2.1-jdk15.jar,这些包没有引是不行的。我之前就是少了ezmorph-1.0.6.jar包出现了异常。至于为什么要引这些包,作为小白的我还暂时无法解释,反正你引进去就行了。其实还是建议读者自己试试如果没有引入这些包会是什么结果。

    我以一个小案例作为例子进行说明。 这个例子是一个注册的小例子,查看用户名是否已经被注册。

    jsp代码

     1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

     2 <%@ taglib prefix="s" uri="/struts-tags" %>
     3 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
     4 <html>
     5   <head>
     6 <script type="text/javascript" src="script/jquery-1.7.2.min.js"></script>
     7     <script type="text/javascript">
     8             $(function(){
     9                     $('#submit').click(function(){
    10                     
    11                             var params={
    12                                 username:$("#username").val(),
    13                                 password:$("#password").val()
    14                             };
    15 
    16                             $.ajax({
    17                                     url:"RegisterAction.action",
    18                                     data: params,
    19                                     type:"POST",            
    20                                     dataType:"text",        
    21                                     contentType:"application/x-www-form-urlencoded;charset=utf-8",     
    22                                     success:function(json){            
    23                                          var obj = $.parseJSON(json);        
    24                                         $("#warn").html(obj.map.result);                                 
    25                                     }    
    26                             });
    27                     });        
    28             });
    29     </script>
    30   </head>
    31   
    32   <body>
    33             <input type="text" name="username" id="username"><span id="warn"></span><br>
    34             <input type="password" name="password" id="password"><br>
    35             <input type="submit" value="注册" id="submit">
    36   </body>
    37 </html>

      

     我采用的是jQuery,当然需要应用jQuery库文件了。很多人用的是Extjs这里我就不做太多的拓展了。毕竟本人对Extjs不是很熟。

            struts.xml配置文件,这可是重头戏。

     <?xml version="1.0" encoding="UTF-8" ?>

    <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
    <struts>

        <constant name="struts.devMode" value="true"/>
            <!-- 不再使用GBK编码,因为Ajax的POST请求都是以uft-8进行编码的 -->
        <constant name="struts.i18n.encoding" value="utf-8"/>
        
            <!-- 继承自json-default ,采用struts2 对json提供的机制-->
            <package name="ajax" namespace="/" extends="json-default">
                    <!-- 配置类型的json的result -->
                    <action name="RegisterAction" class="com.xh.action.RegisterAction">
                        <result type="json">
                                <param name="noCache">true</param>
                                <param name="contentType">text/html</param>
                        </result>
                    </action>    
                    <action name="*">
                            <result>/{1}.jsp</result>
                    </action>            
            </package>
    </struts>    

       下面是action文件,其实我个人觉得struts最重要的还是关于action的编写和struts.xml文件的配置,真正掌握了MVC模式中control的核心理念

     1 package com.xh.action;

     2 
     3 import java.util.HashMap;
     4 import java.util.Map;
     5 
     6 import org.apache.struts2.json.annotations.JSON;
     7 
     8 import net.sf.json.JSONObject;
     9 
    10 import com.opensymphony.xwork2.ActionSupport;
    11 
    12 @SuppressWarnings("serial")
    13 public class RegisterAction extends ActionSupport {
    14 
    15     
    16         private String username;
    17         private String password;
    18         private Map<String,String> map = new HashMap<String, String>();
    19         private JSONObject jo = new JSONObject();
    20         
    21         public String getUsername() {
    22             return username;
    23         }
    24         public void setUsername(String username) {
    25             this.username = username;
    26         }
    27         public String getPassword() {
    28             return password;
    29         }
    30         public void setPassword(String password) {
    31             this.password = password;
    32         }
    33         
    34         
    35         public Map getMap() {
    36             return this.map;
    37         }
    38         public String  getJo() {
    39             
    40                 return this.jo.toString();
    41                 
    42         }
    43         @Override
    44         public String execute() throws Exception {
    45                 
    46                  if("xiaohai".equals(username)){
    47                              map.put("result", "sorry, your name is repeated");
    48                  }else{
    49                              map.put("result",     "congratulation");
    50                  }
    51                  
    52                  jo = JSONObject.fromObject(map);
    53                  
    54                  return SUCCESS;
    55         }
    56         
    57         
    58 }

    这里我用了两种方式,一种是定义一个Map对象,另一种是直接定义一个JSON对象,进行相应的赋值。读者可以进行参考比较,其实没什么太大的区别,我尝试过在jsp页面中的success的回调函数中将接受到的map变量打印出来,或是将上面代码中的$("#warn").html(obj.jo.result); 改成

    $("#warn").html(obj.map.result);其实是一致的。。。  

     

      代码也很简单,我就不再多做详细的解释了。还有一种利用stream类型的Result实现Ajax,这种类型的Result可以直接向客户端浏览器生成二进制文件、文本相应等。如果你对这个感兴趣,我也可以提一下。本来可以把源代码提出来的,但是我发现博客园的代码编辑器坑爹的很,原来放上来的代码都不能看了。今天是来做修改的。之前做的stream类型的Result代码已经被我删掉了。。。

       好了,今天就介绍到这里吧。。。

      路还在继续

     

  • 相关阅读:
    当在服务器或者云端发布程序的时候,注意事项
    Oracle 在使用pivot时,注意事项
    当采用datagrid自带的方法加载列表时,当在后台遇到错误时,如何在前台提示错误
    Oracle 在分组的同时,取每个分组的前几条PARTITION BY
    带有res资源文件的项目 需要导成jar包 供别人使用的解决方法
    java乱码问题
    网络通信框架Volley使用详细说明
    深刻的理解Fragment生命周期 都在做什么,fragment生命周期
    ScrollView中嵌套ListView时,listview高度显示的问题
    关于一个app中数据库的问题
  • 原文地址:https://www.cnblogs.com/itmangelihai/p/2748685.html
Copyright © 2011-2022 走看看