如何在struts2中使用ajax

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在struts2中使用ajax相关的知识,希望对你有一定的参考价值。

意思就是在jsp页面添加这句:<s:head theme="ajax">可是我每次访问这个页面的时候都会报出一大堆错误我就猜测是不是需要导入一些ajax的jar包了?还有使用struts2自带的一些DOJO,但是做不出文档中提供的那些效果出来是跟浏览器有关系还是怎么了?

Struts2中有两种方式处理Ajax请求:
(注:我使用的是最新的Struts 2.3.20)

1. 使用Stream result的方式以流的形式写出到客户端。(这种方式我没有亲自做实验,下面的例子参考Struts2的官方文档)
这样书写我们的Action:
package actions; import java.io.InputStream;import java.io.StringBufferInputStream;import com.opensymphony.xwork2.ActionSupport; public class TextResult extends ActionSupport private InputStream inputStream; public InputStream getInputStream() return inputStream; public String execute() throws Exception inputStream = new ByteArrayInputStream("Hello World! This is a text string response from a Struts 2 Action.".getBytes("UTF-8")); return SUCCESS;

这样配置我们的struts.xml:<action name="text-result" class="actions.TextResult"> <result type="stream">

们可以这样书写我们的Action:
package actions; import java.io.InputStream;import java.io.StringBufferInputStream;import com.opensymphony.xwork2.ActionSupport; public class TextResult extends ActionSupport private InputStream inputStream; public InputStream getInputStream() return inputStream; public String execute() throws Exception inputStream = new ByteArrayInputStream("Hello World! This is a text string response from a Struts 2 Action.".getBytes("UTF-8")); return SUCCESS;

这样配置我们的struts.xml:<action name="text-result" class="actions.TextResult"> <result type="stream">

. 使用Struts2的插件机制:(下面我以返回JSON格式的数据为例进行说明,需要struts2-json-plugin-2.3.20包,这个包在Struts2的官方下载中已经包含,不需要额外下载)
首先是前台发送Ajax请求:(我这里使用JQuery)
$("#btnClick").click(function() $.post("hello", name: "tanzhenyu", function(data) alert(data.greeting + ", " + data.name + "!"); , "json"); );

我们的Action这样写:
public HelloAction extends ActionSupport private String name;//这里的nam用来接收Ajax的请求数据 private Map<String, String> resultMap;//这里的Map用来返回结果JSON数据 public getName() return name; public setName(String name) this.name = name; public getResultMap() return resultMap; public setResultMap(Map<String, String> resultMap) this.resultMap = resultMap; public String execute() resultMap = new Map<>(); resultMap.put("greeting", "Hello"); resultMap.put("name", name); return Action.SUCCESS;

这里注意的是:我们的Map对象不需要手动转成JSON对象,Struts2的JSON插件会帮我们转。

我们的配置文件可以这样写:
<package name="default" namespace="/" extends="json-default"> <action name="hello" class="cn.tzy..hello.action.HelloAction"> <result type="json"> <param name="root">resultMap</param> </result> </action></package>

这里注意的是:extends必须是“json-default”,name为root的param是说明返回时被序列化的对象,值为一个OGNL表达式。
OK,成功搞定,如果有疑问可以参考Struts2官
参考技术A 一般都是在jsp和servlet的交互中间加一个js,然后在js中写ajax 参考技术B 用jquery ,json 就可以很简单 去网上找下教程 参考技术C jquery

如何使用 dojo 和 struts2 在对话框中显示异步获取的信息?

【中文标题】如何使用 dojo 和 struts2 在对话框中显示异步获取的信息?【英文标题】:How can i show asynchronously gotten information in a dialog box using dojo and struts2? 【发布时间】:2012-06-05 15:24:08 【问题描述】:

我正在构建一个代码,使用 Struts2 和 Dojo 来支持 Ajax。当使用某些链接时,我正在尝试启动一个对话框。此对话框应包含单击所述链接时异步获取的信息。

这是我的代码:

<s:url id="buscar_usuarios_url" value="/buscar_usuarios.action"/>
<li id="menu_buscar_usuarios"><sx:a targets="buscar_usuarios_dialog" href="%buscar_usuarios_url">Buscar usuarios</sx:a></li>

这段代码得到了我需要在我在这个脚本中使用的对话框中显示的html:

$(document).ready(function() 
   $("#menu_buscar_usuarios").live('click', function() 
        $("#buscar_usuarios_dialog").dialog(
            modal:true
        );
   );

我遇到的问题是,当我单击 标记时,只获取了信息,但没有显示对话框。而当我点击 外的 时,只显示对话框,但信息没有更新。

我尝试将 id "menu_buscar_usuarios" 赋予 标签,但它也不起作用,我该怎么办?

【问题讨论】:

给 sx:a 提供 id "menu_buscar_usuarios" 的错误是什么 请将此添加为答案并在 48 小时后接受,将来会帮助某人 是的,我试过了。我没有足够的声誉,所以我只需要等待 6 个小时。那我就做吧。谢谢。 +1 表示您努力帮助他人 :) 【参考方案1】:

我修好了。我只是给了 id “menu_buscar_usuarios”,而不是使用已弃用的 live() 函数,而是使用了 on() 函数,如下所示:

$(document).ready(function() 
   $("#menu_buscar_usuarios").live('click', function() 
        $("#buscar_usuarios_dialog").dialog(
            modal:true
        );
   );

谢谢大家

【讨论】:

以上是关于如何在struts2中使用ajax的主要内容,如果未能解决你的问题,请参考以下文章

jsp使用jquety $.ajax()传参数。struts2 action 如何接收所传的值

java中的struts2+spring+Hibernate整合的框架中如何使用Ajax完成用户注册的用户名重复

如何使用 dojo 和 struts2 在对话框中显示异步获取的信息?

使用 Java、Struts 2 和 AJAX 下载文件

Ajax在Struts2中通过jquery调用

struts2中,jsp页面通过ajax访问了action,action如何返回一个json数据给这个jsp页面,