一、采用基本类型接收请求参数(get/post)
在Action类中定义与请求参数同名的属性,struts2便能接收自动接收请求参数并赋给同名属性。

action的代码:

  1. public class ParamAction {
  2. private Integer id;
  3. private String name;
  4. public String execute(){
  5. return "success";
  6. }
  7. public void setId(Integer id) { //通过反射技术调用与请求参数同名的属性的setter方法来获取请求参数值
  8. this.id = id;
  9. }
  10. }

配置文件:

  1. <package name="myDemo" namespace="/demo" extends="struts-default">
  2. <action name="param" class="demo.action.ParamAction">
  3. <result>/WEB-INF/jsp/result.jsp</result>
  4. </action>
  5. </package>

form页面,此页面直接保存在根目录下:

  1. <body>
  2. <form action="<%=request.getContextPath() %>/demo/param.action" method="post">
  3. id:<input type="text" name="id"></input>
  4. name:<input type="text" name="name"></input>
  5. <input type="submit" name="submit" value="提交"></input>
  6. </form>
  7. </body>

在id与name中分别填写信息后,如:123, testParam,点击提交按钮,在result.jsp页面中就会看到相应的值。

result.jsp页面如下所示:

  1. <%@ taglib uri="/struts-tags" prefix="s"%>
  2. <body>
  3. id:${id}
  4. name:<s:property value="name" />
  5. </body>

测试的页面输出结果为:id:123     name:testParam

二、采用复合类型接收请求参数

action代码如下所示:

  1. public class TestAction {
  2. private Person person;
  3. public Person getPerson() {
  4. return person;
  5. }
  6. public void setPerson(Person person) {
  7. this.person = person;
  8. }
  9. public String execute(){
  10. return "success";
  11. }
  12. }

Person类的代码如下所示:

  1. public class Person {
  2. private Integer id;
  3. private String name;
  4. //setter和getter方法
  5. }

配置文件如下:

  1. <package name="myDemo" namespace="/demo" extends="struts-default">
  2. <action name="test" class="demo.action.TestAction">
  3. <result>/WEB-INF/jsp/result.jsp</result>
  4. </action>
  5. </package>

from页面的代码如下:

  1. <body>
  2. <form action="<%=request.getContextPath() %>/demo/test.action" method="post">
  3. person.id:<input type="text" name="person.id"></input>
  4. person.name:<input type="text" name="person.name"></input>
  5. <input type="submit" name="submit" value="提交"></input>
  6. </form>
  7. </body>

在person.id与person.name中分别填写信息后,如:123, testParam,点击提交按钮,在result.jsp页面中就会看到相应的值。Person.id:123     Person.name:testParam

result.jsp中的代码如下所示:

  1. <%@ taglib uri="/struts-tags" prefix="s"%>
  2. <body>
  3. Person.id:${person.id}
  4. Person.name:<s:property value="person.name" />
  5. </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方法中增加如下代码:

  1. public void doFilter(...){
  2. HttpServletRequest req = (HttpServletRequest) request;
  3. req.setCharacterEncoding("UTF-8");//应该根据你使用的编码替换UTF-8
  4. filterChain.doFilter(request,response);
  5. }

action接收请求参数的更多相关文章

  1. Struts系列笔记(6)---action接收请求参数

    action接收请求参数 在web开发中,去接收请求参数来获得表单信息非常的常见,自己也总结整理了有关Struts2通过action接收请求参数的几种方法. Struts2 提供三种数据封装的方式: ...

  2. struts2 action接收请求参数和类型转换

    1,action接收请求参数 在struts2中action是什么?(struts2是一个mvc框架)         V:jsp        M:action         C:action  ...

  3. Struts框架(6)---action接收请求参数

    action接收请求参数 在web开发中,去接收请求参数来获得表单信息非常的常见,自己也总结整理了有关Struts2通过action接收请求参数的几种方法. Struts2 提供三种数据封装的方式: ...

  4. Struts2之Action接收请求参数和拦截器

    技术分析之在Struts2框架中使用Servlet的API        1. 在Action类中也可以获取到Servlet一些常用的API        * 需求:提供JSP的表单页面的数据,在Ac ...

  5. Struts2笔记2--动态方法调用和Action接收请求方式

    动态方法调用(在请求的时候,再明确具体的响应方法,配置的时候不明确): LoginAction类中有两个方法some和second 1. 动态方法的调用(修改常量struts.enable.Dynam ...

  6. Struts2基础-3 -继承ActionSupport接口创建Action控制器+javaBean接收请求参数+ 默认Action配置处理请求错误 + 使用ActionContext访问ServletAPI

    1.目录结构及导入的jar包 2.web.xml 配置 <?xml version="1.0" encoding="UTF-8"?> <web ...

  7. SpringMVC——接收请求参数和页面传参

    Spring接收请求参数: 1.使用HttpServletRequest获取 @RequestMapping("/login.do") public String login(Ht ...

  8. struts2视频学习笔记 11-12(动态方法调用,接收请求参数)

    课时11 动态方法调用 如果Action中存在多个方法时,可以使用!+方法名调用指定方法.(不推荐使用) public String execute(){ setMsg("execute&q ...

  9. Struts2学习笔记(六)——Action处理请求参数

    在struts2框架中关于Action处理请求参数有两种方案(三个方式),表单属性的名称应该和在Action类中定义的成员属性或者在JavaBean中定义的成员属性名称一样: 1.属性驱动 1)直接在 ...

随机推荐

  1. Centos安装ruby--jekyll

    想要使用gem install 安装jekyll,执行发现没有gem这个命令,那就需要先安装gem了 yum list '*ruby*' 修改gem源,使用淘宝的源: gem sources --re ...

  2. anaconda指定镜像源,解决conda下载速度慢失败问题

    conda升级默认官网地址,速度会特别慢,现在我们指定一个当前可用的镜像,步骤如下: 1.执行命令,生成.condarc文件 conda config --add channels https://m ...

  3. 可执行文件格式elf和bin

    区别 常用的可执行文件包含两类:原始二进制文件(bin)和可加载执行的二进制文件,在linux中可加载执行的二进制文件为elf文件. BIN文件是直接的二进制文件,内部没有地址标记.bin文件内部数据 ...

  4. pl/sql 实例精解 08

    1: EXCEPTION 2: WHEN EXCEPTION_NAME THEN 3: ERROR-PROCESSING STATEMENTS; 写在 begin 与 end 的之间的处理异常块. 常 ...

  5. 简要描述如何结合struts、hibernate、spring开发Web应用?

    简要描述如何结合struts.hibernate.spring开发Web应用? 解答:Struts可以将jsp页面的表单关联起来,就是把JSP页面的表单数据封装成javaBean,这样的话,在acti ...

  6. 实现Netty服务器与CocosCreate通信

    尽量采用无锁化Netty通信处理棋牌房间逻辑 一,棋牌类服务器的特点 1,棋牌类不分区不分服 一般来说,棋牌游戏都是不分区不分服的.所以棋牌类服务器要满足随着用户量的增加而扩展的需要,所以需要设计Ga ...

  7. linux驱动开发---导出内核符号

    导出内核符号模板代码,验证小实例: /** *Copyright (c) 2013.TianYuan *All rights reserved. * *文件名称: Esdexp.c *文件标识: 导出 ...

  8. Ideal-image-slider 幻灯片实例演示

    链接:http://zaixianshouce.iteye.com/blog/2316300 http://www.shouce.ren/study/api/s/jq--5733e32bf23bb-- ...

  9. WPF数据验证(4)——响应与获取验证错误

    1780 前面的示例中,有关用户接受到错误的唯一指示是在违反规则的文本框周围的红色轮廓.为了提供更多信息,可以处理 Error 事件,但存储或清除错误时会引发该事件,但前提是必须确保已将 Bindin ...

  10. 【ASK】git使用中出现Permission denied (publickey).

    好久没有用git了,今天突然执行了一下 $git submodule update --init --recursive =============================== 结果出现如下提 ...