struts2实现ajax的两种方式

jsp:

<%@ 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%>">

    <title>My JSP ‘index.jsp‘ starting page</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 rel="stylesheet" type="text/css" href="styles.css">
    -->
    <script type="text/javascript" src="jquery/jquery1.8.3.js" ></script>

    <script>
        function testAjax(){
            var username=$("#ajax_username").val();
            $.post(
            "Test_ajax2.action",
            {username:username},
            function(date){
                    alert(date);
                }
            );
        }
    </script>
  </head>

  <body>
    <input type="text" id="ajax_username"><button onclick="testAjax()" >提交</button>
  </body>
</html>

struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />
    <constant name="struts.i18n.encoding" value="utf-8"/>

    <package name="example" namespace="/">
        <action name="*_*" class="com.web.action.{1}Action" method="{2}">
        </action>
    </package>

    <package name="example1" namespace="/" extends="json-default">
        <action name="Test_ajax2" class="com.web.action.TestAction" method="ajax2">
        </action>
    </package>

</struts>

TestAction.java:

package com.web.action;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class TestAction extends ActionSupport {
    private String username;

    public void setUsername(String username) {
        this.username = username;
    }

    public void ajax() throws IOException{
        HttpServletResponse response=ServletActionContext.getResponse();
        response.setContentType("text/html; charset=utf-8");
        PrintWriter writer=response.getWriter();

        //只有这样才可以获取到值,不写下面这行代码username的值为null
        this.username=ServletActionContext.getRequest().getParameter("username");

        writer.print("hello,"+username);
        writer.flush();
        writer.close();
    }

    public void ajax2() throws IOException{
        System.out.println(1);
        HttpServletResponse response=ServletActionContext.getResponse();
        response.setContentType("text/html; charset=utf-8");
        PrintWriter writer=response.getWriter();
        writer.print("hello,"+username);
        writer.flush();
        writer.close();
    }

}

第一种方式使用的方法是我的方法ajax(),但是使用这种方式的时候:ajax和request耦合,使用Action无法自动为username属性注入值。我暂时不知道为什么,有知道原因的告诉下,谢谢!

第二种方式使用的是方法ajax2(),这种方式的的前提是使用插件:

也就是struts中需要导入jar:

然后你的package必须继承json-default

这样你的Action就可以为ajax参数自动赋值了。

时间: 2024-10-11 03:20:09

struts2实现ajax的两种方式的相关文章

Struts2网页面传值两种方式

第一种方式: /** 列表 */ public String list() throws Exception { List<Role> roleList = roleService.findAll(); ActionContext.getContext().put("roleList", roleList); return "list"; } 第二种方式: /** 修改页面 */ private Role model = new Role(); publ

ajax的两种方式

get: var ajax=new XMLHttpRequest();ajax.open('get','__URL__/check_all?val='+check);ajax.send();ajax.onreadystatechange=function(){   if(ajax.readyState==4&&ajax.status==200){     ajax.responseText;    }} post: var ajax=new XMLHttpRequest();ajax.op

【TP3.2 + 其他任何PHP框架】编辑、删除、添加数据,返回原分页 (ajax+form两种方式提交均可以)

1.目的1:在如下的一个页面中,p=2,比如我们删除数据id=13,通过ajax提交{id,p} 这2个参数,就可以了,页面返回json的url参数中原样带上p即可. 2.目的2: 步骤1:在如下页面,编辑id=12的数据,这时候首先在index页面,通过$_REQUEST['p'] 实时动态获取页码p,然后在index.html页面渲染,放入隐藏域或者拼接[<a>编辑]href属性,带上id和p参数, 步骤2:进入编辑页面edit.html,将id和p均放在隐藏域 一起保存POST提交,返回

jquery ajax提交表单数据的两种方式

jquery ajax提交表单数据的两种方式

从源代码剖析Struts2中用户自定义配置转换器的两种方式——基于字段的配置转换器和基于类型的配置转换器(解决了实际系统中,因没有区分这两种工作方式的生命周期而引起的异常错误问题)

自定义类型转换器必须实现ongl.TypeConverter接口或对这个接口的某种具体实现做扩展 <<interface>>com.opensymphony.xwork2.conversion.TypeConverter à com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter à org.apache.struts2.util.StrutsTypeConverter 接口及类进行解析 TypeConverter(

jquery的ajax传递参数两种方式

<script type="text/javascript" src="js/jquery-1.7.js"></script> <script type="text/javascript"> $(function(){ $("#button").click(function(){ $.ajax({ url:'myServlet', type:'post', dataType:'json',

ajax有两种提交数据的方式,分别为get和post(转)

ajax有两种提交数据的方式,分别为get和post.post方法可传输大于2K的数据,在Ajax里的应用不同之处在于:"post方法的请求地址与传输的数据是放在两个对象里—-请求地址放在open对象里,传输的数据放在send对象里:并且在传输数据之前定义一个传输文件HTTP头信息(setRequestHeader)" 以下为引用的内容: <SCRIPT LANGUAGE="javascript"> function saveUserInfo(){ //

Struts2获取Requst和Session的两种方式

第一种: HttpServletRequest request = ServletActionContext.getRequest(); HttpSession session = request.getSession(); 第二种: //实现类 implements RequestAware,SessionAware //定义属性 private Map request; private Map session; //Set方法 public void setRequest(Map reque

Struts2访问session的两种方法

Struts2 的Action中若希望访问Session对象,可采用两种方式:     1.从ActionContext中获取:     2.实现SessionAware接口. 1.从ActionContext中获取: import java.util.Map; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class SessionTestAc