欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-03-12 18:09:02
参数传递即将参数传输到程序后台中,后台可能做一些处理,然后再将内容存入数据库之类嗒! 参数传递的方法较多,一一说明如下。 1、action中直接参数法 有如下的ind...

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

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

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=""> 
<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" 
    ""> 
 
<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=""> 
<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中参数传递方法的全部内容,希望能给大家一个参考,也希望大家多多支持。