`
wangming2012
  • 浏览: 138751 次
  • 性别: Icon_minigender_1
  • 来自: 枣阳
社区版块
存档分类
最新评论

Struts2 中的数据传输

阅读更多

1.     如何将参数从界面传递到Action

你可以把Struts2中的Action看做是Struts1Action+ActionForm,即只需在Action中定义相关的属性(要有getters/setters方法),然后界面传参的名称跟这些属性保持一致即可。普通的数据类型,将可自动转换。(空字符串转换为int类型时将报错)

 

2.     如何将数据从Action传输到JSP

可通过多种方式传输

通过Action的属性传输

直接给action的属性赋值,在转向之后的JSP中,直接用标签<s:property value=OGNL表达式/>取出即可。

比如:

publicclass UserAction {

    private String username;

    private Integer age;

    privatebooleanvalid;

   

    //查看用户的详细信息

    public String detail(){

      

       username = "张三";

       age = 18;

       valid = true;

      

       return"detail";

    }

 

detail.jsp中,引入struts2taglib,用这些taglib来呈现数据:

 

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

<%@ taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <body>

username:<s:property value="username"/><br/>

valid:<s:property value="valid"/><br/>

age:<s:property value="age"/><br/>

 

  </body>

</html>

 

 

 

通过ActionContext传输

可通过ActionContext.getContext().put()方法来传值

 

Action的方法中:

    public String detail(){

      

       ActionContext.getContext().put("name", "王五");

      

       username = "张三";

      

       ActionContext.getContext().put("username", "李四");

      

      

       return"detail";

    }

 

JSP中:

  <body>

   

    <!-- ActionContext中取name的值 -->

    name: <s:property value="#name"/><br/>

   

    <!-- 先看Action中有没有name属性如果没有则到ActionContext中找name的值 -->

    name: <s:property value="name"/><br/>

   

    <!-- ActionContext中取username的值 -->

    username : <s:property value="#username"/><br/>

   

    <!-- Action对象中取username属性 -->

    username : <s:property value="username"/><br/>

   

  </body>

 

 

通过request/session等传输

 

可通过ServletActionContext.getRequest()/getSession()等方法来获得request/session对象,然后调用其中的setAttribute()方法来传值。

 

演示各种数据的传输、展现技巧!

 

Action中通过request/session来传值:

    public String detail(){

      

       //通过request

       ServletActionContext.getRequest().setAttribute("sex", "");

      

       //通过session

       ServletActionContext.getRequest().getSession().setAttribute("address", "北京");

      

       //通过session

       ActionContext.getContext().getSession().put("postcode", "1234567");

      

       return"detail";

    }

 

 

 

JSP中取值:

 

  <body>

   

    <!-- request中取sex -->

    request.sex = <s:property value="#request.sex"/><br/>

    request.sex = <s:property value="#request['sex']"/><br/>

   

    <!-- session中取值 -->

    session.address = <s:property value="#session.address"/><br/>

    session.postcode = <s:property value="#session.postcode"/><br/>

   

    <!-- 依次搜索page/request/session/application scope取值 -->

    attr.postcode=<s:property value="#attr.postcode"/><br/>

  </body>

 

传递复杂对象及集合对象

 

如果在Action中传递一个复杂的对象到JSP,在JSP中,通过OGNL表达式,可以用句点“.”来访问对象中的属性。

如果传递一个集合对象到JSP,在JSP中可以通过<s:iterator>标签来访问集合中的数据。

 

Action中的代码:

       //传递复杂对象

       User u = new User();

       u.setUsername("admin");

       Group g = new Group();

       g.setName("管理员组");

       u.setGroup(g);

       ActionContext.getContext().put("user", u);

      

       //列表数据

       List list = new ArrayList();

       for(int i=0; i<10; i++){

           User user = new User();

           user.setUsername("User"+i);

           user.setAge(10+i);

           list.add(user);

       }

       ActionContext.getContext().put("users", list);

 

JSP中的代码:

    <!-- 通过句点访问对象的属性值 -->

    user.username=<s:property value="#user.username"/><br/>

    user.group.name=<s:property value="#user.group.name"/><br/>

   

    users: <br/>

    <s:iterator value="#users">

       <!-- 这个访问的是当前循环的user对象中的username属性 -->

       username:<s:property value="username"/>,<s:property value="age"/><br/>

    </s:iterator>

   

    <!-- 这个访问的是Action对象中的username属性 -->

    username:<s:property value="username"/><br/>

 

利用OGNL表达式访问静态方法、普通的实例方法及Action对象中的方法

 

假设有一个工具类,如下所示:

package cn.com.leadfar.utils;

 

publicclass Utils {

    publicstatic String toUpperCase(String str){

       return str.toUpperCase();

    }

   

    public String toLowerCase(String str){

       return str.toLowerCase();

    }

}

 

 

Action类的定义如下:

publicclass UserAction {

    private String username;

    //查看用户的详细信息

    public String detail(){

       ……………………

       return"detail";

    }

   

    //这个方法可以在JSP中用OGNL表达式直接调用!

    public Utils getUtils(){

       returnnew Utils();

    }

 

 

则在JSP中可以直接通过OGNL表达式来访问这些方法:

<!-- 调用静态方法 -->

<s:property value="@cn.com.leadfar.utils.Utils@toUpperCase(username)"/>

 

<!-- 利用OGNL表达式创建Utils对象,并调用它的实例方法 -->

<s:property value="new cn.com.leadfar.utils.Utils().toLowerCase(username)"/>

 

<!-- 调用Action对象的getUtils().toLowerCase()方法 -->

<s:property value="utils.toLowerCase(username)"/>

 

【注意,在最新的struts2版本中,要想在JSP中通过OGNL表达式访问静态方法,则必须配置如下constant

<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>

 

 

如何在iterator循环体内访问外部的同名属性?

 

请看下述代码:

package cn.com.leadfar.struts2.actions;

 

publicclass User {

    private String username;

    public String getUsername() {

       returnusername;

    }

    publicvoid setUsername(String username) {

       this.username = username;

    }

   

}

 

 

publicclass UserAction {

    private String username;

 

    //查看用户的详细信息

    public String detail(){

      

       username = "张三";

      

      

       //列表数据

       List list = new ArrayList();

       for(int i=0; i<10; i++){

           User user = new User();

           user.setUsername("User"+i);

           list.add(user);

       }

       ActionContext.getContext().put("users", list);

      

       return"detail";

    }

 

JSP中通过<s:iterator>访问列表数据:

    <s:iterator value="#users">

       <!-- 这个访问的是当前循环的user对象中的username属性 -->

<s:property value="username"/>

       <s:property value="#root[1].username"/><br/>

    </s:iterator>

 

上面这个例子中,<s:property value=username>访问的是当前循环中的user对象的username属性,而<s:property value=#root[1].username/>访问的是UserAction对象中的username属性!

分享到:
评论
1 楼 sinotao1 2013-04-20  
写得非常好。

相关推荐

    Android开发HTTP传输数据到Struts2生成Json数据案例

    Android开发HTTP传输数据到Struts2生成Json数据案例

    Struts2与Ajax 精简源码

    把数据传输给前台的。 前台Ajax格式如下(需要导入ajax库,比如:jquery-1.11.3.js) 格式: $(function(){ $().click(function (){ $.post("",function(data){ $().html(data); }); }); }); --%&gt;

    ext2.2+struts2使用json传输数据生成的树

    使用ext2.2 struts2集成生成的一棵树,主要是对struts2返回json数据进行一些处理,树使用ext本身自带的例子

    struts2使用域模型传值

    struts2使用域模型传值,如何在struts2中使用与模型传值

    struts2简单实例

    学生信息查询实例,用struts2配置文件,action的实现以及通过action实现前后台的数据传输

    struts2 ztree

    在struts2 2.2版本下实现ztree功能,是json格式进行数据传输

    基于Struts2和Ajax的企业级Web应用开发

    针对传统的企业级Web应用开发中客户端与服务器端之间存在数据传输效率和响应速度低、用户体验差的问题,提出了一种基于Struts2+jQuery Ajax的企业级Web应用开发方案,并将该方案运用到中小型煤炭企业客户关系管理系统...

    struts2与jquery实现ajax操作

    这个struts2 实例是通过用js的一个框架jquery来实现的ajax,jquery真的不错,其中的数据传输格式用的时json,用了一个json_lib的jar包,所有所需的包都在了,下载后就能运行,对于初学struts2与ajax的朋友很有点帮助...

    struts2继承easyui

    网上这方面资源太乱太杂 而且都是拷贝来拷贝去的 所以特此写了这个测试代码 ...有详细的注释教会你如何使用struts2去调用easyui控件,这种方式的调用还是比较好的,毕竟采用了JSON数据格式,传输起来更加方便和快速。

    解决struts2下载异常的jar包 struts2-sunspoter-stream-1.0.jar

    在struts2中使用result里type="stream"的结果类型时,可以实现文件的下载管理,使用时也是比较顺畅,但是当在“下载提示窗口”中点击“取消按钮”时,总是报出“java.lang.IllegalStateException”异常,异常内容...

    struts 传递json数据

    用 struts 向页面传输 json数据

    struts2的json插件配置详解(附demo)

    为了方便ajax调用传输数据,在struts2中加入的json插件用来做对象的序列化和反序列化,json插件的下载地址 http://code.google.com/p/jsonplugin/ 1. 下载json插件包,将jar包拷贝到WEB-INF/lib目录 注:struts2...

    struts2+jquery+json+ajax例子

    这是前台用jsp页面,并应用jquery、easyui、ajax、struts2技术,以json数据格式传输的一个登录例子

    研究论文-Struts2架构中的Commons-fileupload组件应用技术.pdf

    基于HTTP传输协议的Web网页中,采用嵌入Commonsfileupload组件的Struts2框架,实现了文件的上传与下载.利用OGNL表达式提取Session持久层中的文件名,并利用此文件名实现下载文件的动态更名.灵活利用struts2.0自身...

    Hibernate+Struts2+ExtJs4.0

    Hibernate+Struts2+ExtJs4.0,采用json做数据传输做的小例子

    struts+spring+hibernate基础整合包+数据库Mysql+C3p0

    资源中包含ssh整合的基础java包可以进行基础开发,如果需要额外的功能,则需加入对应依赖的包。数据库的链接包是MySQl数据库,链接使用的C3P0 SSH是 struts+spring+hibernate的一个集成框架,是目前比较流行的一种...

    ajax利用json在struts2.0中的使用

    本项目使用ajax 利用json在struts2.0传输数据

    struts2+jsp 环保公司门户网站 前台+后台

    修改db.java 中数据库的用户名密码 即可

    struts标签手1.x .chm

    Action和jsp的开发其实就是对...外面的struts书籍介绍标签和数据传输原理都比较简单,下面我对标签技术和数据传输原理,进行全方位多角度的剖析.希望对各位有所帮助.以此为模版,将大大提高开发效率.以sample为机能名称.

    Struts2.2.3Spring3.1ibatis2.0整合精典案例

    页面请求全部使用ajax请求,数据传输以JSON格式传输,并且使用的是struts2 的JSON技术。页面js使用Jquery1.6 ,在界面的右端展示了增删改查操作,并且界面布局使用的是div的布局方式。这是今天 在一家公司做上机试题...

Global site tag (gtag.js) - Google Analytics