Struts2 前端与后台之间传值问题
老是被前端与后台之间的传值给弄糊涂了,特此写一篇blog进行总结。
一. 前端向后台传值
(1)属性驱动
属性驱动是指在Action类里,包含表单里对应的字段(字段名称一样),同时设置对应的getter和setter。
表单代码:html
1: <form action="login" method="post">
2: <label>username:</label>
3: <input type="text" name="username">
4: <label>password:</label>
5: <input type="text" name="username">
6: </form>
对应的Action:LoginAction
java代码:
1: public LoginAction extends ActionSupport{
2: private String username; //对应表单中input属性name=username
3: private String password; //对应表单中input属性name=password
4:
5: /*-- getter and setter --*/
6: public void setUsername(String username){
7: this.username = username;
8: }
9: public String getUsername(){
10: return this.username;
11: }
12: public void setPassword(String password){
13: this.password = password;
14: }
15: public String getPassword(){
16: return this.password;
17: }
18: public String execute(){
19: return SUCCESS;
20: }
21: }
在struts.xml中配置Action
1: <action name="login" class="com.bigdata.action.LoginAction">
2: <result name="success">success.jsp</result>
3: </action>
在success.jsp页面中使用{username}来访问username属性。
属性驱动适合于表单域传值较少的情况,如果表单域过多的话,Java代码将会充斥着大量的getter和setter代码。
(2)对象驱动
对象驱动是指在Action里包含一个对象,而这个对象的属性与表单域一一对应。
对应的Action:LoginAction
1: public LoginAction extends ActionSupport{
2: private User user;
3:
4: /*-- getter and setter --*/
5: public void setUser(User user){
6: this.user = user;
7: }
8: public User getUser(){
9: return this.user;
10: }
11: public String execute(){
12: return SUCCESS;
13: }
14: }
对应的user类:
1: public Class User{
2: private String username;
3: private String password;
4:
5: public String getPassword() {
6: return password;
7: }
8: public void setPassword(String password) {
9: this.password = password;
10: }
11:
12: public String getUsername(){
13: return username;
14: }
15: public void setUsername(String username){
16: this.username = username;
17: }
18: }
前台html页面代码
1: <form action="login" method="post">
2: <label>username:</label>
3: <input type="text" name="user.username">
4: <label>password:</label>
5: <input type="text" name="user.password">
6: </form>
表单域的name由对象名和属性名组成,中间用.连接,Action对象被创建后,通过setter进行赋值。Action result页面则通过${user.username}来访问。
二. 后台向前端传值
(1)使用Struts2的标签
对应Action:
1: public Class CollectAction extends ActionSupport{
2: private String [] arryStr;
3: //遍历list
4: private List<User> list;
5: private Map<String,String> map;
6: private Map<Integer,User> userMap;
7: private Map<String,List<User>> userListMap;
8:
9: public void setArryStr(String[] arryStr){
10: this.arryStr = arryStr;
11: }
12: public String[] getArryStr(){
13: return arryStr;
14: }
15:
16: //省略其他的getter与setter
17: public String execute(){
18:
19: arryStr[] = new String[]{"wbl","sdfsdf","gfg"};
20:
21: list.add(new User("wbl","123"));
22: list.add(new User("avd","ggg"));
23: list.add(new User("eee","iii"));
24:
25: map.put("key1","value1");
26: map.put("key2","value2");
27: map.put("key3","value3");
28:
29: userMap.put(1,new User("wbl","123"));
30: userMap.put(2,new User("avd","ggg"));
31:
32: userListMap.put("user",list);
33: }
34: }
Action对应的JSP页面:
1: <div id="arryStr">
2: <!-- iterator遍历String 字符数组 -->
3: <s:iterator value="arryStr" id="arryValue">
4: <span><s:property value="arryValue" /></span>
5: </s:iterator>
6: </div>
7:
8: <div id="list">
9: <!-- iterator遍历List集合 -->
10: <table>
11: <s:iterator value="list" id="user">
12: <tr>
13: <td><s:property value="username" /></td>
14: <td><s:property value="password" /></td>
15: </tr>
16: </s:iterator>
17: </table>
18: </div>
19:
20: <div id="map">
21: <!-- iterator遍历Map中的String字符串 -->
22: <s:iterator value="map" id="column">
23: <tr>
24: <td>Key:<s:property value="key" /></td>
25: <td>Value:<s:property value="value" /></td>
26: </tr>
27: </s:iterator>
28: </div>
29:
30: <div id="userMap">
31: <!-- iterator遍历Map中的User 对象(Object) -->
32: <s:iterator value="userMap" id="column">
33: <tr>
34: <td><s:property value="value.username"/></td>
35: <td><s:property value="value.password"/></td>
36: </tr>
37: </s:iterator>
38: </div>
39:
40: <div id="userlistMap">
41: <!-- iterator遍历Map中的List集合 -->
42: <s:iterator value="userListMap" id="column">
43: <s:set var="total" name="total" value="#column.value.size"/>
44: <s:iterator value="#column.value" id="col" status="st">
45: <tr>
46: <td><s:property value="username"/></td>
47: <td><s:property value="password"/></td>
48: </tr>
49: </s:iterator>
50: </s:iterator>
51: </div>
(2)AJAX
ajax方式可以实现异步更新数据,这里我采用json格式传输数据。
首先,建立一个action:
1: public class ajaxAction extends ActionSupport{
2: private JSONObject dataObj; //向前台传递的JSON数据
3:
4: public JSONObject getDataObj() {
5: return dataObj;
6: }
7:
8: public void setDataObj(JSONObject dataObj) {
9: this.dataObj = dataObj;
10: }
11:
12: public String execute(){
13: dataObj = new JSONObject();
14: dataObj.put("key","value");
15: dataObj.put("result","SUCCESS");
16: return SUCCESS;
17: }
18: }
struts.xml中action的配置
1: <action name="ajax" class="com.bigdata.action.ajaxAction">
2: <result type="json">
3: <param name="root">dataObj</param>
4: <param name="callbackParameter">jsoncallback</param>
5: </result>
6: </action>
如果为某个action指定了一个类型为json的Result,则该Result无须映射到任何视图资源,因为json插件会负责将Action里的状态信息序列化成JSON格式的字符串,并将该字符串返回给客户端浏览器。
json类型的Result允许指定的参数
root:设置该参数将不再把整个Action对象序列化成JSON字符串,而只是将该参数所指定的Action的属性序列化成JSON字符串返给客户端,本例中将会把dataObj进行序列化。
callbackParameter: 配置该参数之后,才能进行JSON的跨域传输。
前端利用jQuery完成AJAX交互
1: <div id="ajaxTest">
2: <input type="button" value="test" id="show">
3: </div>
4: </body>
5: <script type="text/javascript" src="js/jquery.js"></script>1:
2: <script>
3: $(function(){
4: $("show").click(function(){
5: $.getJSON(
6: /*访问Action的URL地址*/
7: "http://localhost:8080/bigData/ajax?jsoncallback=?",
8: /*得到服务器响应之后的操作*/
9: function(respose){
10: if(respose.result == "SUCCESS")
11: $("#ajaxTest").append("<span>SUCCESS</span>");
12: })
13: })
14: })</script>
6: </html>
function中的参数response对应Action中的dataObj,此时就可以获得由后端传入的值。
Struts2 前端与后台之间传值问题的更多相关文章
- asp.net前台页面与后台之间传值,
在前台用 js 获取到的 “值 ”需要传到后台,在后台调用, ****** 原有传入的 “值 ” 不要被覆盖 1.最简单的在页面写一个隐藏表单,隐藏标签,把获取到的值赋给隐藏标签之后 ...
- 前端和后台BUG区分方法
测试工程师不只是负责发现问题,除了发现问题这种基本功外,定位问题,提出解决方案,提出预防方案也是要掌握的技能.这里先说定位问题的要求,定位问题要向深入,前提当然是对功能.产品的流程.开发方案.开发人员 ...
- 前端c标签foreach传值给后台
前端c标签foreach传值给后台 <div style="margin-bottom: 10px"> <c:forEach items="${good ...
- ASP.NET 相同页面前后端之间传值
aspx页面前后端之间传值:前端的html或js获得后端的cs,后端的cs获得前端的js值. 一.前端获得后端的值 1.html元素 前端: <td><%=str%></ ...
- 通过AngularJS实现前端与后台的数据对接(二)——服务(service,$http)篇
什么是服务? 服务提供了一种能在应用的整个生命周期内保持数据的方法,它能够在控制器之间进行通信,并且能保证数据的一致性. 服务是一个单例对象,在每个应用中只会被实例化一次(被$injector实例化) ...
- 通过AngularJS实现前端与后台的数据对接(一)——预备工作篇
最近,笔者在做一个项目:使用AngularJS,从而实现前端与后台的数据对接.笔者这是第一次做前端与后台的数据对接的工作,因此遇到了许多问题.笔者在这些问题中,总结了一些如何实现前端与后台的数据对接的 ...
- asp.net页面之间传值方法详解
asp.net中页面之间传值我们用得最多的就是get,post这两种了,其它的如session,appliction,cookie等这些相对来说少用也不是常用的,只是在特殊情况下在使用了. 1. Ge ...
- WPF中实现两个窗口之间传值
在使用WPF的时候,我们经常会用到窗体之间传值,下面示例主窗口传值到子窗口,子窗口传值到主窗口的方法. 一.主窗口向子窗口传值 主窗口向子窗口传值主要方法就是在子窗口建立一个接收主窗口值的变量,然后实 ...
- 深度剖析Vue中父给子、子给父、兄弟之间传值!
本片文章将为您详细讲解在Vue中,父给子传值.子给父传值以及兄弟之间传值方式! 父传子:父组件 // template里面 <aa :info="name"/> // ...
随机推荐
- 查看识别hadoop是32位还是64位
问题导读: 1.从哪些地方可以识别hadoop是32位还是64位?2.hadoop本地库在什么位置? 来源:about云 本文链接:http://www.aboutyun.com/thread-127 ...
- 深入理解WeakHashmap
转自:http://mikewang.blog.51cto.com/3826268/880775 (一) 查看API文档,WeakHashmap要点如下: 1. 以弱键 实现的基于哈希表的 Map.在 ...
- 利用PyCharm的Profile工具进行Python性能分析
Profile:PyCharm提供了性能分析工具Run->Profile,如下图所示.利用Profile工具可以对代码进行性能分析,找出瓶颈所在. 测试:下面以一段测试代码来说明如何使用pych ...
- 【转】创建和使用ANDROID LIBRARY工程
原文网址:http://www.cnblogs.com/Greenwood/archive/2011/06/19/2084499.html 摘要: 创建library供多个工程共享代码.资源是非常常见 ...
- python-day-10-python mysql and ORM
本节内容 数据库介绍 mysql 数据库安装使用 mysql管理 mysql 数据类型 常用mysql命令事务 创建数据库 外键 增删改查表 权限 索引 python 操作mysql ORM sq ...
- UVa 1611 Crane (构造+贪心)
题意:给定一个序列,让你经过不超过9的6次方次操作,变成一个有序的,操作只有在一个连续区间,交换前一半和后一半. 析:这是一个构造题,我们可以对第 i 个位置找 i 在哪,假设 i 在pos 位置, ...
- hihocoder 1584 Bounce(找规律)
传送门 题意 略 分析 我们观察几张图 发现菱形的边长为n-1和m-1的公约数 将图简化一下 接下来我们计算只经过一次的点,分成两类 1.与边相交 num1=x+y 2.未与边相交,在菱形内 num2 ...
- python __builtins__ credits类 (15)
15.'credits', 信用 class _Printer(builtins.object) | interactive prompt objects for printing the licen ...
- 黑客攻防技术宝典web实战篇:攻击其他用户习题
猫宁!!! 参考链接:http://www.ituring.com.cn/book/885 随书答案. 1. 在应用程序的行为中,有什么“明显特征”可用于确定大多数 XSS 漏洞? 用户提交的输入在应 ...
- TensorFlow多线程输入数据处理框架(四)——输入数据处理框架
参考书 <TensorFlow:实战Google深度学习框架>(第2版) 输入数据处理的整个流程. #!/usr/bin/env python # -*- coding: UTF-8 -* ...