Struts2学习笔记(5)-参数传递方法

参数传递即将参数传输到程序后台中,后台可能做一些处理,然后再将内容存入数据库之类嗒!

参数传递的方法较多,一一说明如下。

1、Action中直接参数法

有如下的index.jsp文件

代码如下:

<?xml version="1.0" encoding="GB18030" ?> 
<%@ page language="java" contentType="text/html; charset=GB18030" 
    pageEncoding="GB18030"%> 
 
<%  
String path = request.getContextPath(); 
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 
%> 
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=GB18030" /> 
<base href="<%=basePath %>"/> 
<title>Insert title here</title> 
</head> 
<body> 
使用action属性接收参数<a href="user/user!add?name=a&age=8">添加用户</a> 
     
</body> 
</html>

对于其中的<a></a>来说,传递两个参数至程序,一个是name,一个是age,在struts.xml中的配置如下:

代码如下:

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE struts PUBLIC 
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
    "http://struts.apache.org/dtds/struts-2.0.dtd"> 
 
<struts> 
    <constant name="struts.devMode" value="true" /> 
    <package name="user" extends="struts-default" namespace="/user"> 
         
        <action name="user" class="com.bjsxt.struts2.user.action.UserAction"> 
            <result>/user_add_success.jsp</result> 
        </action> 
    </package> 
</struts>

这时我们的UserAction该如何写呢?范例如下:

代码如下:

package com.bjsxt.struts2.user.action; 
 
import com.opensymphony.xwork2.ActionSupport; 
 
public class UserAction extends ActionSupport { 
     
    private String name; 
    private int age; 
     
    public String add() { 
        System.out.println("name=" + name); 
        System.out.println("age=" + age); 
        return SUCCESS; 
    } 
 
    public String getName() { 
        return name; 
    } 
 
    public void setName(String name) { 
        this.name = name; 
    } 
 
    public int getAge() { 
        return age; 
    } 
 
    public void setAge(int age) { 
        this.age = age; 
    } 
     
     
}

很简单,就是定义了两个属性,注:这两个属性的set和get方法必须要写,可以使用eclipse的快速生成方式,非常简单。这样上述程序在运行时就会打印出所要的结果

name=a和age=8。

有说明如下:第一,struts2会自动进行参数传递,这个过程无需我们参与;第二,struts传递参数时针对的是set和get方法,而不是name和age属性,也就是说,假如我们修改其中的name为其他名称,如username,但是方法仍然是setName和getName的话,对于整个功能的实现来说没有任何区别,只是有点别扭而已;第三,也是最重要的一点,就是假如有很多的属性,这样的话我们就需要非常多的set和get方法,这是非常不方便的,因此引伸出了下面这种方式。

2、Action添加类对象法

这个时候我们1中的属性都归于一个类中,如User

代码如下:

package com.bjsxt.struts2.user.model; 
 
public class User { 
    private String name; 
    private int age; 
    public String getName() { 
        return name; 
    } 
    public void setName(String name) { 
        this.name = name; 
    } 
    public int getAge() { 
        return age; 
    } 
    public void setAge(int age) { 
        this.age = age; 
    } 
}

这样在Action类中的写法就变得简单了很多

代码如下:

package com.bjsxt.struts2.user.action; 
 
import com.bjsxt.struts2.user.model.User; 
import com.opensymphony.xwork2.ActionSupport; 
 
public class UserAction extends ActionSupport { 
     
    private User user; 
 
    public String add() { 
        System.out.println("name=" + user.getName()); 
        System.out.println("age=" + user.getAge()); 
        return SUCCESS; 
    } 
 
    public User getUser() { 
        return user; 
    } 
 
    public void setUser(User user) { 
        this.user = user; 
    } 
     
}

注:此时我们不需要自己手动生成一个User对象,这个过程是由Struts2自动完成的。

并且此时的url也需要作下修改,即index中的<a></a>标签作下修改:

代码如下:

<?xml version="1.0" encoding="GB18030" ?> 
<%@ page language="java" contentType="text/html; charset=GB18030" 
    pageEncoding="GB18030"%> 
 
<%  
String path = request.getContextPath(); 
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 
%> 
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=GB18030" /> 
<base href="<%=basePath %>"/> 
<title>Insert title here</title> 
</head> 
<body>  
使用Domain Model接收参数<a href="user/user!add?user.name=a&user.age=8">添加用户</a> 
     
</body> 
</html>

修改成上述18行部分。

上面说明了下Struts2参数传递的两种方法,其中第二种方法被称为:DomainModel,域模型。即新建一个类,用于存放属性。

下面说明另外一种方法,被称为:ModelDriven,模型驱动。

它与第二种方法非常类似,其他都是一样的,仅仅就是Action和访问有区别,它的Action如下:

代码如下:

package com.bjsxt.struts2.user.action; 
 
import com.bjsxt.struts2.user.model.User; 
import com.opensymphony.xwork2.ActionSupport; 
import com.opensymphony.xwork2.ModelDriven; 
 
public class UserAction extends ActionSupport implements ModelDriven<User>{ 
     
    private User user = new User(); 
     
    public String add() { 
        System.out.println("name=" + user.getName()); 
        System.out.println("age=" + user.getAge()); 
        return SUCCESS; 
    } 
 
    @Override 
    public User getModel() { 
        return user; 
    } 
     
}

我们可以从中看到,它实现了ModelDriven接口,并采用了泛型技术。采用这种方式Struts2不会自动的实例化一个对象,因此只能我们手动生成。它覆写了ModelDriven接口的getModel()方法,它的作用就是返回一个类对象。

它的访问是和第二种有区别的(与第一种方法一样):

代码如下:

使用ModelDriven接收参数<a href="user/user!add?name=a&age=8">添加用户</a>

它并没有采用user.name的方式,这也是为什么必须要new一个对象的原因。

这种方式的基本思想过程为:首先Action解析url,获得其中的参数,然后进入Action中,发现此Action实现了一个ModelDriven接口,此时就调用ModelDriven接口的getModel方法,获得类的对象,然后调用此类的set和get方法,将参数传入。

此种方式体现了Struts2的MVC思想,M----Model,V----View,C----Controller,但是这种方式很少使用,我们使用最多的还是上面的第二种方式。

以上就是Struts2中参数传递方法的全部内容,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Struts2学习笔记(8)-Result常用类型

    Result也是Struts2比较重要的一部分,在Result的配置中常用的有四种类型:dispatcher.redirect.chain和redirectAction,在这四种中又以前两种最为常见. 例: <struts> <constant name="struts.devMode" value="true" /> <package name="resultTypes" namespace="/r&qu

  • Struts2学习笔记(9)-Result配置全局结果集

    Result可以设定全局结果集,如: <struts> <constant name="struts.devMode" value="true" /> <package name="user" namespace="/user" extends="struts-default"> <global-results> <result name="m

  • Struts2 Result 参数详解

    一个提交到服务器的处理通常可以分为两个阶段,第一个阶段查询服务器状态(查询或者更新数据库),第二个阶段选择一个合适的结果页面其返回给用户(这里要讲的Result的内容). Struts2提供了对不同种类返回结果的支持,常见的有JSP,FreeMarker,Velocity等. Struts2支持的不同类型的返回结果为: 名字 说明 Chain Result 用来处理Action链 Dispatcher Result 用来转向页面,通常处理JSP FreeMarker Result 处理FreeM

  • Struts2学习笔记(5)-参数传递方法

    参数传递即将参数传输到程序后台中,后台可能做一些处理,然后再将内容存入数据库之类嗒! 参数传递的方法较多,一一说明如下. 1.Action中直接参数法 有如下的index.jsp文件 复制代码 代码如下: <?xml version="1.0" encoding="GB18030" ?>  <%@ page language="java" contentType="text/html; charset=GB18030&

  • java struts2学习笔记之线程安全

    在说struts2的线程安全之前,先说一下,什么是线程安全?这是一个网友讲的. 如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码.如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的. 就是说,在一个进程中有多个线程并发执行,每个线程执行过程中,变量值是相同的,执行结果也是相同的,就是线程安全的.否则就是线程不安全的. 然后回顾一下servlet的线程安全问题,由于servlet是单例模式的,只会产生一个实例,当多个用户同

  • Axios学习笔记之使用方法教程

    前言 最近正在学习Axios,相信大家都知道Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中.所以本文将详细介绍关于Axios使用方法的相关内容,分享出来供大家参考学习,下面话不多说,来一起看看详细的介绍: Axios Github 功能特性 从浏览器中创建 XMLHttpRequests 从 node.js 创建 http 请求 支持 Promise API 拦截请求和响应 转换请求数据和响应数据 取消请求 自动转换 JSON 数据 客户端支持防御

  • Python3学习笔记之列表方法示例详解

    前言 本文主要给大家介绍了关于Python3列表方法的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 1 使用[]或者list()创建列表 user = [] user = list() 2 使用list() 可以将其他类型转换成列表 # 将字符串转成列表 >>> list('abcde') ['a', 'b', 'c', 'd', 'e'] # 将元祖转成列表 >>> list(('a','b','c')) ['a', 'b', 'c']

  • Struts2学习笔记(1)-入门教程

    什么是Structs2?它就是在Struts1的基础上演化而来的,是一种MVC模式的框架,其实它的功能很简单,就是将View和逻辑处理层分开.本人才疏学浅,以前都是用Spring做项目,由于要毕业,所以需要进行转行(暂且这么说吧),公司都是用的Structs框架,木有办法,从头开始学吧! 所需软件-Eclipse.TomCat7.0.Struts-2.3.1.2(源码自己下载),下面以具体小项目来说明. 首先是Struts2的工作原理:首先Tomcat对用户所输入的URL进行解析,将其中的项目名

  • Struts2学习笔记(3)-DMI动态调用方式

    什么是DMI?DMI即所谓的动态方法调用. Action在执行的时候并不一定要执行execute方法,可以在配置文件中配置Action的时候用method=来指定执行哪个方法,也可以在url地址中动态指定(动态方法调用DMI). 第一种方式,在struts.xml中对Action添加method: 复制代码 代码如下: <struts>     <constant name="struts.devMode" value="true" />  

  • Struts2学习笔记(6)-简单的数据校验

    数据校验是在项目开发中不可缺少的一部分,用户登录时.密码验证时都需要,当然要做的首先是获得用户输入的内容,然后对内容进行验证,一般都是从数据库中读出然后校验,如果错误则显示提示信息,正确则进入用户主界面. 下面用一个简单小例子来说明下步骤: 1.index的表单 复制代码 代码如下: <%@ page language="java" contentType="text/html; charset=UTF-8"      pageEncoding="U

  • Struts2学习笔记(2)-路径问题解决

    在struts2中的路径问题是根据Action的路径而不是JSP的路径确定的,所以尽量不要使用相对路径,使用相对路径会让路径问题变得很繁琐很麻烦,有的时候一个细微的变动会导致你需要大的改动. 解决方法其实也很简单:即统一使用绝对路径. 在jsp中可以通过request.getContextRoot的方式获得webapp的绝对路径: 复制代码 代码如下: <%@ page language="java" import="java.util.*" pageEnco

  • Struts2学习笔记(4)-通配符的使用

    通配符是在struts2配置中非常常用的一种配置方式,在程序开发过程中要遵循"约定优于配置"的原则,在这种原则下,约定的结果如果比较合适的话,就会大大减少配置的数量,使得配置变得非常简单,方便. 下面以例子来做下说明: 1.由如此的一个struts.xml配置文件: 复制代码 代码如下: <?xml version="1.0" encoding="UTF-8" ?>  <!DOCTYPE struts PUBLIC      &

  • Struts2学习笔记(7)-访问Web元素

    常用的Web元素有:request.session.application等,而我们一般使用session较多,Struts2如何访问web元素呢?这个是非常重要的内容,因为它能完成程序后台和用户的数据交互,下面以注册为例演示其过程: 1.index.jsp文件 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

随机推荐