• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

java 搞代码 4年前 (2022-01-05) 18次浏览 已收录 0个评论

本文主要介绍Struts2中参数传递方法,希望能给大家做一个参考。

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

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

1、Action中直接参数法

有如下的index.jsp文件

代码如下:
 
<%@ page language="java" contentType="text/html; charset=GB18030" 
    pageEncoding=”GB18030″%> 
 
<%  
String path = request.getContextPath(); 
String basePath = request.getScheme()+”://”+request.getServerName()+”:”+request.getServerPort()+path+”/”; 
%> 
 
 
 
 
 
<base href="”/> 
Insert title here 
 
 
使用action属性接收参数添加用户 
     
 

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

代码如下:
 
<!DOCTYPE struts PUBLIC 
    “-//Apache Software Foundation//DTD Struts Configuration 2.0//EN” 
    “http://struts.apache.org/dtds/struts-2.0.dtd”> 
 
 
     
     
         
         
            /user_add_success.jsp 
         
     

这时我们的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中的标签作下修改:

代码如下:
 
<%@ page language="java" contentType="text/html; charset=GB18030" 
    pageEncoding=”GB18030″%> 
 
<%  
String path = request.getContextPath(); 
String basePath = request.getScheme()+”://”+request.getServerName()+”:”+request.getServerPort()+path+”/”; 
%> 
 
 
 
 
 
<base href="”/> 
Insert title here 
 
  
使用Domain Model接收参数添加用户 
     
 

修改成上述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{ 
     
    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; 
    } 
     

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

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

代码如下:
使用ModelDriven接收参数添加用户

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

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

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

以上就是Struts2中参数传递方法的全部内容,希望能给大家一个参考,也希望大家多多支持gaodaima搞代码网

以上就是Struts2学习笔记(5)-参数传递方法的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Struts2学习笔记(5)-参数传递方法

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址