struts2中的路径问题 
注意:在jsp中”/”表示tomcat服务器的根目录,在struts.xml配置文件中”/”表示webapp的根路径,即MyEclipse web项目中的WebRoot路径。 
总结: 
struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径 。 
虽然可以用redirect方式解决,但redirect方式并非必要。 
解决办法非常简单,统一使用绝对路径。 (在jsp中用request.getContextRoot方式来拿到webapp的路径) 
或者使用myeclipse经常用的,指定basePath。

Action Method 
配置: 
    <package name="user" extends="struts-default" namespace="/user"> 
        <action name="userAdd" class="com.bjsxt.struts2.user.action.UserAction" method="add"> 
            <result>/user_add_success.jsp</result> 
        </action> 
        
        <action name="user" class="com.bjsxt.struts2.user.action.UserAction"> 
            <result>/user_add_success.jsp</result> 
        </action> 
    </package> 
总结: 
Action执行的时候并不一定要执行execute方法 
1、可以在配置文件中配置Action的时候用method=来指定执行哪个方法 
2、也可以在url地址中动态指定(动态方法调用DMI )(推荐) 
<a href="<%=context %>/user/userAdd">添加用户</a> 
<br /> 
<a href="<%=context %>/user/user!add">添加用户</a> 
<br /> 
前者会产生太多的action,所以不推荐使用。(注:<% String context = request.getContextPath(); %>)

Action Wildcard(Action 通配符) 
配置: 
    <package name="actions" extends="struts-default" namespace="/actions"> 
        <action name="Student*" class="com.bjsxt.struts2.action.StudentAction" method="{1}"> 
            <result>/Student{1}_success.jsp</result> 
        </action> 
        
        <action name="*_*" class="com.bjsxt.struts2.action.{1}Action" method="{2}"> 
            <result>/{1}_{2}_success.jsp</result> 
            <!-- {0}_success.jsp --> 
        </action> 
</package> 
{1}、{2}表示第一第二个占位符 
*为通配符

通过action name的通配匹配,获得占位符,可以使用占位符放在result和method、class中替代匹配的字符。 
总结: 
使用通配符,将配置量降到最低。 
<a href="<%=context %>/actions/Studentadd">添加学生</a> 
<a href="<%=context %>/actions/Studentdelete">删除学生</a> 
不过,一定要遵守"约定优于配置"的原则。 
<a href="<%=context %>/actions/Teacher_add">添加老师</a> 
<a href="<%=context %>/actions/Teacher_delete">删除老师</a> 
<a href="<%=context %>/actions/Course_add">添加课程</a> 
<a href="<%=context %>/actions/Course_delete">删除课程</a>

接收参数值 
1、使用action属性接收参数

只需在action加入getter/setter方法,如参数name=a,接受到参数必须有getName/setName方法。

链接:<a href="user/user!add?name=a&age=8">

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; 
    } 
}

2、使用Domain Model接收参数 
将之前的属性放入到POJO ,并设置属性的setter/getter方法

链接:使用Domain Model接收参数<a href="user/user!add?user.name=a&user.age=8">添加用户</a>

public class UserAction extends ActionSupport { 
    
    private User user; 
    //private UserDTO userDTO; 
    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; 
    } 
    

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; 
    } 
}

3、使用ModelDriven接收参数 
Action实现ModelDriven接口,实现getModel()方法。 
这样user需要自己new出来,getModel返回user。

链接:使用ModelDriven接收参数<a href="user/user!add?name=a&age=8">添加用户</a>

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; 
    } 
}

字符编码 
配置: 
<constant name="struts.i18n.encoding" value="GBK" /> <!-- internationalization --> 
在struts2.1.6中不起作用,属于bug,在struts2.1.7中修改。 
解决方案: 
修改web.xml 中: 
  <filter> 
      <filter-name>struts2</filter-name> 
      <!-- struts2.1中使用filter --> 
<!--<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>--> 
      <!-- struts2.0中使用的filter --> 
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> 
  </filter>

Struts2 学习笔记--Action Method--接收参数的更多相关文章

  1. Struts2学习笔记 - Action篇<定义逻辑Action>

    有三种方法可以使一个Action处理多个请求 动态方法调用DMI 定义逻辑Acton 在配置文件中使用通配符 这文章就谈论一下定义逻辑Action 这里主要关注的是struts.xml配置文件,一般情 ...

  2. Struts2学习笔记 - Action篇<动态方法调用>

    有三种方法可以使一个Action处理多个请求 动态方法调用DMI 定义逻辑Acton 在配置文件中使用通配符 这里就说一下Dynamic Method nvocation ,动态方法调用,什么是动态方 ...

  3. Struts2学习笔记 - Action篇<配置文件中使用通配符>

    有三种方法可以使一个Action处理多个请求 动态方法调用DMI 定义逻辑Acton 在配置文件中使用通配符 这里就说一下在配置文件中使用通配符,这里的关键就是struts.xml配置文件,在最简单的 ...

  4. Struts2学习笔记⑧

    今天是Struts2学习笔记的最后一篇文章了.用什么做结尾呢,这两天其实还学了很多东西,没有记录下,今天就查漏补缺一下. 文件上传与下载.FreeMarker以及昨天没做完的例子 文件上传与下载 文件 ...

  5. Struts2学习笔记NO.1------结合Hibernate完成查询商品类别简单案例(工具IDEA)

    Struts2学习笔记一结合Hibernate完成查询商品类别简单案例(工具IDEA) 1.jar包准备 Hibernate+Struts2 jar包 struts的jar比较多,可以从Struts官 ...

  6. struts2学习笔记(四)——访问Servlet的API&结果跳转&数据封装

    一.Struts2访问Servlet的API 前面已经对Struts2的流程执行完成了,但是如果表单中有参数如何进行接收?又或者我们需要向页面保存一些数据,又要如何完成呢?我们可以通过学习Struts ...

  7. Struts2 学习笔记(概述)

    Struts2 学习笔记 2015年3月7日11:02:55 MVC思想 Strust2的MVC对应关系如下: 在MVC三个模块当中,struts2对应关系如下: Model: 负责封装应用的状态,并 ...

  8. Action属性接收参数

    一.action的属性(地址栏传参)接收参数:如果使用的JDK属性不一致,则会使得传值无法实现.解决办法:1.系统自身需要用到的JDK(window——>属性——>Java——>In ...

  9. Struts2学习笔记①

    Struts2 学习笔记① 所有的程序学习都从Hello World开始,今天先跟着书做一个HW的示例. Struts2是一套MVC框架,使用起来非常方便,接触到现在觉得最麻烦的地方是配置文件.我的一 ...

随机推荐

  1. flume在windows环境下的使用

     Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集.聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据:同时,Flume提供对数据进行简单处理, ...

  2. python中实现三目运算

    python中没有其他语言中的三元表达式,不过有类似的实现方法 如: a = 1 b =2 k = 3 if a>b else 4 上面的代码就是python中实现三目运算的一个小demo, 如 ...

  3. HDU 1024 最大M字段和

    一道关于求最大M字段和的问题,翻译完题之后感觉很简单但就是写不来,后来仿佛推到一个dp式子了,对,仿佛...然后抄袭了个式子,嘿,和我的式子大体相似,然后就是很玄学的优化了...不多瞎bb了 1.首先 ...

  4. python多态和鸭子类型

    多态与多态性 多态指的是一类事物有多种形态,(一个抽象类有多个子类,因而多态的概念依赖于继承). 比如:文件分为文本文件,可执行文件(在定义角度) 比如 我们按下 F1 键这个动作: 如果当前在 Fl ...

  5. git 删除 repository

    git 删除 repository 打开版本库,选择要删除的repository 点击Settings 找到删除选项 输入repository name,点击delet…… 删除本地仓库 执行git ...

  6. POJ 2260

    #include <iostream> #define MAXN 100 using namespace std; int _m[MAXN][MAXN]; int main() { //f ...

  7. js06

    接着我们继续学习一些js的知识,这里主要讲js的一些库jq与prototype的一些基础. 1.jq函数    $():向其传递DOM对象,返回jQuery对象        jq允许通过CSS选择器 ...

  8. 编译vs下可调试的ffmpeg和x264

    以前随手记的笔记,翻出来,整理下哈 ffmpeg 在windows上的编译还是比较麻烦的,而且如果mingw-gcc编译的话,是无法在vs下调试的 所以以前刚开始玩ffmpeg的时候,费了一些功夫,用 ...

  9. java数据结构之三叉链表示的二叉树

    三叉链表示的二叉树定义所畏的三叉链表示是指二叉树由指向左孩子结点.右孩子结点.父亲结点[三叉]的引用(指针)数据和数据组成.    package datastructure.tree.btree; ...

  10. Disconf 学习系列之Disconf 与 Diamond的横向对比(图文详解)

    不多说,直接上干货! Disconf 学习系列之Disconf是什么? Disconf 是来自百度的分布式配置管理平台,包括百度.滴滴出行.银联.网易.拉勾网.苏宁易购.顺丰科技 等知名互联网公司正在 ...