利用struts2框架进行将页面请求的参数封装有三种方法

第一种(不推荐)

就是动作类和bean中结合在一起,这样方法比较简单,但是很混乱。

代码:

package com.example.action;

import com.opensymphony.xwork2.ActionSupport;

public class Person extends ActionSupport{

    private String username;
private String password;
private String nickname;
public String getUsername() {
return username;
} //动作的方法
public String execute() throws Exception {
System.out.println(username+","+password+","+nickname);
return NONE;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
}
  <action name="act1"  class="com.example.action.Person">
<!-- 静态注入 相当于调用action动作类的get 和set 方法--> <param name="nickname">游客</param>
</action>

第二种将动作类与bean中分离

package com.example.domain;
/**
* 这是模型
* @author sheldonLee
*
*/
public class Student { private String username;
private String password;
private String nickname;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
@Override
public String toString() {
return "Student [username=" + username + ", password=" + password
+ ", nickname=" + nickname + "]";
} }
package com.example.action;

import com.example.domain.Student;

/**
* 这是动作
* @author sheldonLee
*
*/
public class StudentAction { private Student student; public Student getStudent() {
return student;
} public void setStudent(Student student) {
this.student = student;
} public String save(){
//将表单的数据封装到模型对象中
//调用service 将student中的数据保存到数据库中
System.out.println(student.toString());
return "none";
}
}
  <body>
<form action="${pageContext.request.contextPath }/act2" method="post">
用户名:<input type="text" name="student.username"/><br/>
密 码:<input type="password" name="student.password"/><br/>
昵 称: <input type="text" name="student.nickname"/><br/>
<input type="submit" value="注册"/><br/>
</form>

第三种是驱动模型(动作和bean也是分开的)ModelDriven

package com.example.domain;
/**
* 这是Customer模型
* @author sheldonLee
*
*/
public class Customer {
private String username;
private String password;
private String nickname;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
@Override
public String toString() {
return "Customer [username=" + username + ", password=" + password
+ ", nickname=" + nickname + "]";
} }
package com.example.action;

import com.example.domain.Customer;
import com.opensymphony.xwork2.ModelDriven; public class CustomerAction implements ModelDriven<Customer>{ //动作类关联一个Customer 对象
//为了getModel() 这个不会返回为空 所以要是实例化一个对象
private Customer customer= new Customer(); public Customer getCustomer() {
return customer;
} public void setCustomer(Customer customer) {
this.customer = customer;
} public String save(){
System.out.println(customer);
return "none";
}
//调用动作方法前,框架会先调用这个方法
//这里不会实例化对象
public Customer getModel() {
// TODO Auto-generated method stub
return customer;
}
}
   <form action="${pageContext.request.contextPath }/act2" method="post">
<!--参数中省掉了类名 -->
用户名:<input type="text" name="username"/><br/>
密 码:<input type="password" name="password"/><br/>
昵 称: <input type="text" name="nickname"/><br/>
<input type="submit" value="注册"/><br/>
</form>

主要注意两点 动作类要实现ModelDriver的接口,动作类中要关联对象要注意要实例化

struts2封装请求参数的更多相关文章

  1. 十一、Struts2封装请求参数的方式

    十一.Struts2封装请求参数的方式 方式一.Action 本身作为model对象,通过成员setter封装(一个名字为params的拦截器干的) 注意:表单中的名称要和动作类中的名称一致(这是必须 ...

  2. struts2之请求参数接收

    struts2之请求参数接收 1. 采用基本类型接受请求参数(get/post)在Action类中定义与请求参数同名的属性,struts2便能自动接收请求参数并赋予给同名的属性.请求路径:http:/ ...

  3. struts2接受请求参数

    https://blog.csdn.net/y249839817/article/details/77702745 https://blog.csdn.net/nthack5730/article/d ...

  4. Struts2接受请求参数三种常用方法

    一 接受请求参数主要有三种:属性驱动 对象驱动 模型驱动<model Driven> 方式1:在Action中接收请求参数不需要使用request对象,在Action中定义与请求参数相同名 ...

  5. struts2获取请求参数的三种方式及传递给JSP参数的方式

    接上一篇文章 package test; import com.opensymphony.xwork2.ActionSupport; import javax.servlet.http.*; impo ...

  6. 利用Common-BeanUtils封装请求参数

    一.BeanUtils介绍 commons-beanutils是利用反射机制对JavaBean的属性进行处理,提供了对于JavaBean的各种处理方法.众所周知,一个JavaBean通常包含了大量的属 ...

  7. Struts2中请求参数的接收方式和ModelDriven机制及其运用

    odelDriven 为什么需要ModelDriven 所谓ModelDriven,意思是直接把实体类当成页面数据的收集对象.比如,有实体类User如下: package cn.com.leadfar ...

  8. struts2获得请求参数的方式

    1.用Action的属性接收参数 2.用DomainModel(域模型)接收参数 3.用ModelDriven接收参数 使用这种方式接受参数需要实现ModelDriven接口,

  9. asp.net中Request请求参数的自动封装

    这两天在测一个小Demo的时候发现一个很蛋疼的问题----请求参数的获取和封装,例: 方便测试用所以这里是一个很简单的表单. <!DOCTYPE html> <html xmlns= ...

随机推荐

  1. 差异是关键,TI首款隔离式CAN收发器评析

    差异是关键,TI首款隔离式CAN收发器评析           “无论是在日常生活还是媒体报道中, CAN接口对大家来说已经司空见惯了,然而将CAN接口和隔离功能整合在同一产品里,这还是业界头一遭,” ...

  2. SQL AND &amp; OR 运算符

    AND 和 OR 运算符用于基于一个以上的条件对记录进行过滤. AND 和 OR 运算符 AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来. 假设第一个条件和第二个条件都成立,则 ...

  3. Robosup3D平台搭建

    目录 1.安装simspark及默认播放器 安装依赖库/下载simspark源码 编译并安装simspark 编译并安装rcssmonitor3d播放器 2.安装Roboviz播放器 安装java 安 ...

  4. Onvif获取rstp地址GetCapabilities能力时,出现error 4或者52的的解决方法

    在获取Onvi能力soap_call___tds__GetCapabilities的接口中有时候会出现error:4或者52的情况,是因为在soapC.c中用不到extension,所以我们必须得把它 ...

  5. Matlab中的“prod”函数

    B = prod(A)将A矩阵不同维的元素的乘积返回到矩阵B. 如果A是向量,prod(A)返回A向量的乘积.如果A是矩阵,prod(A)将A看作列向量,返回每一列元素的乘积并组成一个行向量B.如果A ...

  6. Kotlin基础篇(一)

    写在前面: 因为工作需要,目前转安卓开发,用的IDE是AS3.2版本,语言的话,用的是Kotlin.由于之前是做.NET的,没接触过这方面的东西,所以完全是小白一枚.所以想着开个博客,以此来记录自己的 ...

  7. c++ 绘制方框

    知识点: GetStdHandle函数 FillConsoleOutputCharacter函数 SetConsoleCursorPosition函数 system函数 一. GetStdHandle ...

  8. python面试题(二)

    最近参加了几场招聘,发现好多人的一些基础知识不是很扎实,做的题很多都是错误的,因此找了一些我们公司面试过程中的一些最基本的面试题供大家参考,希望各位都能找到一个好的工作.今天给大家先分享的是关于Pyt ...

  9. 记一次开发人员的奇葩操作-------导致root用户不能登录

    首先,我表示国庆长假被开发呼叫,是一件很不开心的事...... 1.问开发,是不是/etc/passwd文件被更改了?  回答:没有   还好是新装的服务器,还好哥有服务器管理口的远程控制 单用户模式 ...

  10. yocto-sumo源码解析(八): ProcessServer

    从前面章节的论述中,我们知道BitBakeServer实际上是一个ProcessServer,什么是ProcessServer不可不了解. 1. 类的声明: 首先这是一个python的多进程包里面的进 ...