手机版

Struts2和埃阿斯数据交互示例详解

时间:2021-09-01 来源:互联网 编辑:宝哥软件园 浏览:

前言

我们从Web 2.0的随波逐流,Ajax的大放异彩说起斯特拉斯2框架自己整合了对埃阿斯的原生支持(支柱2.1.7,之前的版本可以通过插件实现),框架的整合只是使得数据的创建变得异常简单,并且可以简单的融入到结构2框架中,当然这只是在我们需要数据的时候才会显得流光溢彩。

创建交互式、快速动态网页应用的网页开发技术请求在项目中常常使用,今天就平时掌握的总结一下,关于使用创建交互式、快速动态网页应用的网页开发技术请求到结构2中的行为时,前台页面与后台行为之间的数据传递交互问题。

这里我主要记录下自己所掌握的几种方式。可以根据自己平时项目的需求来进行选择。

1.使用溪流类型的结果

此种类型可以直接让结构2中的行为向客户端浏览器生成文本响应。

示例:

jsp页面:

%@ taglib前缀=' s ' uri='/struts-tags % % @ page内容类型=' text/html;charset=UTF-8 "语言="Java "% html标题Ajax提交登录信息/title % -导入射流研究…插件-% script src=' http : $ { page context。请求。上下文路径}/demo/js/jquery-1。4 .4 .量滴js ' type=' text/JavaScript '/script/head dyh 3异步登录/h3s :表单id=' loginForm '方法=' POST ' s 3360 ext字段名=' username '/s 3360 ext字段名=' PSW '/输入id=' loginBtn '类型=' button '值='提交/s : formdiv id=' show ' style=' display : none;/div/body脚本类型=' text/JavaScript ' $(' # logintn ').单击(函数(){ $('#show ')).hide();//发送请求注册以各表单里歌空间作为请求参数$.get('login ',$('#loginForm ').serializeArray(),函数(数据,StatusText){ $(“# show”).身高(80)。宽度(240)。css(“”边框,' 1px纯黑')。css(“”边框半径,' 15px ').CSS('背景色',' #efef99 ').css('color ',' #ff0000 ').css(“”填充,' 20px ').empty();$('#show ').追加('登录结果: '数据br/');$('#show ').表演(600);},' html ');//指定服务器响应为html });/script/html处理逻辑的操作:

/* * *描述:11。行动*作者: Eleven *日期: 2018/1/26 18:09 */公共类LoginAction扩展了操作支持{私有字符串用户名;私有字符串psw/输出结果的二进制流私有输入流输入流公共字符串登录()引发异常{ if(用户名。等于(“汤姆”)PSW。equals(' 123 ')} { inputStream=new bytearrainputstream('恭喜您,登录成功getBytes(' UTF-8 ');} else { inputStream=new bytearrainputstream('对不起,登录失败getBytes(' UTF-8 ');}返回成功} //提供得到方法public InputStream getInputStream(){ return InputStream;}公共字符串getUsername(){ 0返回用户名;} public void setUsername(String username){ this。用户名=用户名;} public String getPsw(){ return PSW;} public void setsw(String PSW){ this。PSW=PSW} }动作中除了接收页面传递的用户名、密码外,还有一个输入流类型的成员变量,并为它提供了对应的得到方法获取方法中返回的二进制流将会直接输出给客户端浏览器。

struts.xml配置:

?可扩展标记语言版本='1.0 '编码='UTF-8 '?DOCTYPE Struts PUBLIC '-//Apache软件基金会//DTD Struts配置2.3//EN ' ' http://Struts。阿帕奇。org/dtds/Struts-2.3。DTD ' Struts常量名=' Struts。启用。动态方法天职'值='false' /常量名='struts.devMode '值='true' /包名='默认'命名空间='/'扩展='struts-default '操作名='login ' class=' eleven。行动。“登录”方法=“登录”结果类型='-指定溪流流生成响应的数据类型-param name=' ContentType ' text/html/param!-指定行为中由哪个方法去输出输入流类型的变量-param name=' input name ' input stream/param/result/action/package/struts在浏览器中浏览该页面,并输入相关信息,然后提交,可以看到后台行为直接将消息数据返回给页面,而同时页面也不需要进行刷新,而是直接在局部进行显示,这是利用了创建交互式、快速动态网页应用的网页开发技术的异步发送请求。注意,此种方式需要在struts.xml文件中要配置类型为溪流的流,并设置实际调用变量名属性,并在行为中提供输入流对应的得到方法。

运行截图:

2.使用数据类型的结果

有个冲突包struts 2-JSON-plugin-2。3 .16 .3 .罐子,可以为结构2增加数据插件,即当行为中的结果的类型设为数据时,也可以在客户端射流研究…中异步调用行动,并且行为中返回的数据,可以直接被数据插件序列化成数据格式的字符串,并将该字符串返回给客户端浏览器。

示例:

jsp页面:

%@ taglib前缀=' s ' uri='/struts-tags % % @ page内容类型=' text/html;charset=UTF-8 "语言="Java "% html标题Ajax提交登录信息/title % -导入射流研究…插件-% script src=' http : $ { page context。请求。上下文路径}/demo/js/jquery-1。4 .4 .量滴js ' type=' text/JavaScript '/script/head dyh 3异步登录/h3s :表单id=' loginForm '方法=' POST ' s 3360 ext字段名=' username '/s 3360 ext字段名=' PSW '/输入id=' loginBtn '类型=' button '值='提交/s : formdiv id=' show ' style=' display : none;/div/body脚本类型=' text/JavaScript ' $(' # logintn ').单击(函数(){ $('#show ')).hide();//发送请求注册以各表单里歌空间作为请求参数$.get('login ',$('#loginForm ').serializeArray(),函数(数据,statusText){ //此时的数据中包含用户名,psw,年龄$('#show ').身高(80)。宽度(300)。css(“”边框,' 1px纯黑')。css(“”边框半径,' 15px ').CSS('背景色',' #efef99 ').css('color ',' #ff0000 ').css(“”填充,' 20px ').empty();警报(数据);$('#show ').追加(数据“br/”;$('#show ').表演(600);},' html ');});/script/htmlaction代码:

公共类登录扩展了操作支持{私有字符串用户名;私有字符串西南太平洋(PacificSouthwest)私人互联网时代;公共字符串登录()引发异常{年龄=18岁返回成功}公共字符串getUsername(){ 0返回用户名;} public void setUsername(String username){ this。用户名=用户名;} public String getPsw(){ return PSW;} public void setsw(String PSW){ this。PSW=PSW} public int GetAge(){ return age;} public void setAge(int age){ this。年龄=年龄;}}struts.xml中配置:

?xml版本='1.0 '编码='UTF-8 '?DOCTYPE Struts PUBLIC '-//Apache Software Foundation//DTD Struts Configuration 2.3//EN ' ' http://Struts . Apache . org/dtds/Struts-2.3 . DTD ' Struts常量名=' Struts . enable .dynamicmethodin天职'值='false' /常量名='struts.devMode '值='true' /包名='default '命名空间='/' extends='struts-default,json-default '操作名='login ' class=' eleven . action . loginactition '方法=' log in '您可以看到后台操作直接将消息数据返回到页面,而页面不需要刷新,而是直接在本地显示,这是一个使用ajax的异步发送请求。请注意,通过这种方式,您需要配置package来继承struts.xml文件中的json-default,将结果类型配置为json,并提供相应的get方法,该方法需要在操作中传递数据。当然前提是添加struts2-json-plugin-2 . 3 . 16 . 3 . jar,否则struts 2不会自动将数据转换成JSON格式的数据。

效果截图:

因此,我们可以总结出结果类型为json的步骤:

1.导入jar包:struts2-JSON-plugin-2.3.7.jar。

2.配置struts返回的结果集视图,并设置类型=json

3.将相应操作所在的包设置为从json-default继承

4.为要返回的数据提供get方法

5.在struts.xml中设置返回数据的格式

至于第五步返回的数据集的格式,可以根据自己项目的需要具体设置。这只是一个简单的例子,没有采用复杂的数据。如果返回列表集,数据的格式可以设置如下:

结果名称='test '类型='json '!-设置数据源并从一些数据中获取它-!-筛选的数据是从gtmList集合中获取的,并且只获取集合中对象的名称,除了uuid属性-param name=' root ' gtmList/param param name=' include properties ' \[\ d \]\。名称,\ [\ d \] \。uuid/参数/结果

结果名称='ajaxGetBySm '类型='json '!-一般来说,这样的话,默认情况下首先使用source filter动作从整个动作中获取所有内容(前提是这个动作中没有getAction()方法),但是为了方便,一般不要写root:action,然后使用inclusion设置进行筛选-Param name=' root ' action/Param Param name=' include properties ' gtmList \[\ d \]\。名称,gtmlist \ [\ d \] \。uuid/param/result以上两种方法是设置要从gtmlist集合中获取的数据,只获取那些属性为name和uuid的数据。这里只是一些简单的例子,但你可以深入研究。

附加的json类型Result允许您指定公共参数:

另外,除了struts2支持的上述两个ajax之外,其实如果只有服务器可以和客户端浏览器进行数据交互,那么可以使用response.getWrite()。

PrintWriter PrintWriter=response . getwriter();printWriter.print('成功');选择哪种方式?

对于我来说,如果只是判断增删改功能是否成功的一个标志,可以优先响应。getwriter()。打印(' XXX ')并将结果类型设置为流。但是,如果需要返回大量对象数据,请在页面上接收并显示数据。例如,如果页面通过ajax请求并需要后台操作来返回一个列表集,则需要选择将结果类型配置为json的方式。

摘要

以上就是本文的全部内容。希望本文的内容对大家的学习或工作有一定的参考价值。有问题可以留言交流。谢谢你的支持。

版权声明:Struts2和埃阿斯数据交互示例详解是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。