action接收请求参数
一、采用基本类型接收请求参数(get/post)
在Action类中定义与请求参数同名的属性,struts2便能接收自动接收请求参数并赋给同名属性。
action的代码:
- public class ParamAction {
- private Integer id;
- private String name;
- public String execute(){
- return "success";
- }
- public void setId(Integer id) { //通过反射技术调用与请求参数同名的属性的setter方法来获取请求参数值
- this.id = id;
- }
- }
配置文件:
- <package name="myDemo" namespace="/demo" extends="struts-default">
- <action name="param" class="demo.action.ParamAction">
- <result>/WEB-INF/jsp/result.jsp</result>
- </action>
- </package>
form页面,此页面直接保存在根目录下:
- <body>
- <form action="<%=request.getContextPath() %>/demo/param.action" method="post">
- id:<input type="text" name="id"></input>
- name:<input type="text" name="name"></input>
- <input type="submit" name="submit" value="提交"></input>
- </form>
- </body>
在id与name中分别填写信息后,如:123, testParam,点击提交按钮,在result.jsp页面中就会看到相应的值。
result.jsp页面如下所示:
- <%@ taglib uri="/struts-tags" prefix="s"%>
- <body>
- id:${id}
- name:<s:property value="name" />
- </body>
测试的页面输出结果为:id:123 name:testParam
二、采用复合类型接收请求参数
action代码如下所示:
- public class TestAction {
- private Person person;
- public Person getPerson() {
- return person;
- }
- public void setPerson(Person person) {
- this.person = person;
- }
- public String execute(){
- return "success";
- }
- }
Person类的代码如下所示:
- public class Person {
- private Integer id;
- private String name;
- //setter和getter方法
- }
配置文件如下:
- <package name="myDemo" namespace="/demo" extends="struts-default">
- <action name="test" class="demo.action.TestAction">
- <result>/WEB-INF/jsp/result.jsp</result>
- </action>
- </package>
from页面的代码如下:
- <body>
- <form action="<%=request.getContextPath() %>/demo/test.action" method="post">
- person.id:<input type="text" name="person.id"></input>
- person.name:<input type="text" name="person.name"></input>
- <input type="submit" name="submit" value="提交"></input>
- </form>
- </body>
在person.id与person.name中分别填写信息后,如:123, testParam,点击提交按钮,在result.jsp页面中就会看到相应的值。Person.id:123 Person.name:testParam
result.jsp中的代码如下所示:
- <%@ taglib uri="/struts-tags" prefix="s"%>
- <body>
- Person.id:${person.id}
- Person.name:<s:property value="person.name" />
- </body>
说明:struts2首先通过反射技术调用Person的默认构造器创建Person对象,然后通过反射技术调用Person中与请求参数同名的属性的setter方法来获取请求参数值。在这里需要注意的一点是:Person对象一定要有默认的构造器。
采用复合类型接收请求参数的好处,可以减少action中的setter和getter方法,同时可以把相应的属性组合成一个类,这样使代码更好清晰,代码有更好的结构。
注意: 在struts2.1.6版本中存在一个bug,即配置了struts.i18n.encoding常量也不能解决接收到的中文请求参数为乱码(以post方式提交)的问题,原因是此版本在获取请求参数后才调用了HttpServletRequest的setCharacterEncoding()方法进行编码设置,导致应用使用的就是乱码请求参数。此bug在struts2.1.8中已经解决,并且解决了2.1.6中存在的其它bug,如果你使用的是struts2.1.6,解决此bug的方法是配置一个filter,把这个Filter放置在Struts2的Filter之前,并在doFilter方法中增加如下代码:
- public void doFilter(...){
- HttpServletRequest req = (HttpServletRequest) request;
- req.setCharacterEncoding("UTF-8");//应该根据你使用的编码替换UTF-8
- filterChain.doFilter(request,response);
- }
action接收请求参数的更多相关文章
- Struts系列笔记(6)---action接收请求参数
action接收请求参数 在web开发中,去接收请求参数来获得表单信息非常的常见,自己也总结整理了有关Struts2通过action接收请求参数的几种方法. Struts2 提供三种数据封装的方式: ...
- struts2 action接收请求参数和类型转换
1,action接收请求参数 在struts2中action是什么?(struts2是一个mvc框架) V:jsp M:action C:action ...
- Struts框架(6)---action接收请求参数
action接收请求参数 在web开发中,去接收请求参数来获得表单信息非常的常见,自己也总结整理了有关Struts2通过action接收请求参数的几种方法. Struts2 提供三种数据封装的方式: ...
- Struts2之Action接收请求参数和拦截器
技术分析之在Struts2框架中使用Servlet的API 1. 在Action类中也可以获取到Servlet一些常用的API * 需求:提供JSP的表单页面的数据,在Ac ...
- Struts2笔记2--动态方法调用和Action接收请求方式
动态方法调用(在请求的时候,再明确具体的响应方法,配置的时候不明确): LoginAction类中有两个方法some和second 1. 动态方法的调用(修改常量struts.enable.Dynam ...
- Struts2基础-3 -继承ActionSupport接口创建Action控制器+javaBean接收请求参数+ 默认Action配置处理请求错误 + 使用ActionContext访问ServletAPI
1.目录结构及导入的jar包 2.web.xml 配置 <?xml version="1.0" encoding="UTF-8"?> <web ...
- SpringMVC——接收请求参数和页面传参
Spring接收请求参数: 1.使用HttpServletRequest获取 @RequestMapping("/login.do") public String login(Ht ...
- struts2视频学习笔记 11-12(动态方法调用,接收请求参数)
课时11 动态方法调用 如果Action中存在多个方法时,可以使用!+方法名调用指定方法.(不推荐使用) public String execute(){ setMsg("execute&q ...
- Struts2学习笔记(六)——Action处理请求参数
在struts2框架中关于Action处理请求参数有两种方案(三个方式),表单属性的名称应该和在Action类中定义的成员属性或者在JavaBean中定义的成员属性名称一样: 1.属性驱动 1)直接在 ...
随机推荐
- 李洪强iOS开发之iOS社区收集
李洪强iOS开发之iOS社区收集 项目 简述 github 全球最大的代码仓库,无论是iOS开发还是Android开发没有人不知道这个网站,它也是一个社区,你可以去follow(关注)某些人或公司. ...
- CentOS 7下Java的SecureRandom种子初始化失败解决办法
io.netty.util.internal.ThreadLocalRandom getInitialSeedUniquifierWARNING: Failed to generate a seed ...
- php的颜色定义表
http://outofmemory.cn/code-snippet/1960/php-color-define-table <? /////////////////////////////// ...
- 关于appStore不显示构建版本的问题
近日往AppStore上跟新一个版本,提交了好几次,每次都提交成功了,但是在iTunes Contacts上一直没有看到可选的构建版本,也没看到有邮件的反馈,纳闷了好久都不知道是什么鬼原因,后面发现是 ...
- php中while($row = $results->fetch_row())调用出错
php中while($row = $results->fetch_row())调用出错 错误处在sql语句上
- poj3020 Antenna Placement 匈牙利算法求最小覆盖=最大匹配数(自身对应自身情况下要对半) 小圈圈圈点
/** 题目:poj3020 Antenna Placement 链接:http://poj.org/problem?id=3020 题意: 给一个由'*'或者'o'组成的n*m大小的图,你可以用一个 ...
- Could not resolve dependencies for project
最近项目上使用的是idea ide的多模块话,需要模块之间的依赖,比如说系统管理模块依赖授权模块进行认证和授权,而认证授权模块需要依赖系统管理模块进行,然后,我就开始相互依赖,然后出现这样的问题: “ ...
- Windows 动态库创建和使用 part 2
一.Windows动态库的创建: 1.先选择 "DLL" 和 “控项目” 2.添加一个头文件,一个源文件 CppDll.h,CppDll.cpp,一个模块定义文件 CppDll. ...
- Swift-7-闭包
// Playground - noun: a place where people can play import UIKit // swift 中闭包与C和OC中的blocks比较相似 // 1. ...
- SQLServer2008设置开启远程连接
SQL Server 2008默认是不允许远程连接的,sa帐户默认禁用的,如果想要在本地用SSMS连接远程服务器上的SQL Server 2008,需要做两个部分的配置: 1,SQL Serve ...