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. DataType 枚举

    命名空间:   System.ComponentModel.DataAnnotations 成员名称 说明   CreditCard 表示信用卡号码.   Currency 表示货币值.   Cust ...

  2. c# 1-2+3-4.....求和

    找规律: 下界:1 上界:n class Program { static void Main(string[] args) { ; ; i <=; i++) { ==) { sum -= i; ...

  3. c# 字符串去掉两端空格,并且将字符串中多个空格替换成一个空格

    字符串去掉两端空格,并且将字符串中多个空格替换成一个空格: 主要还是考察使用字符串的方法: trim(); 去掉字符串两端空格 split(); 切割 string.join(); 连接 class ...

  4. LinkedBlockingQueue源码解析(2)

    此文已由作者赵计刚授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 3.3.public void put(E e) throws InterruptedException 原 ...

  5. (2019)OCP 12c 062考试题库出现大量新题-4

    4.Which four are true about creating and running a remote database scheduler jobs? A) A credential i ...

  6. 点分治&&动态点分治学习笔记

    突然发现网上关于点分和动态点分的教程好像很少……蒟蒻开篇blog记录一下吧……因为这是个大傻逼,可能有很多地方写错,欢迎在下面提出 参考文献:https://www.cnblogs.com/LadyL ...

  7. Python(多线程threading模块)

    day27 参考:http://www.cnblogs.com/yuanchenqi/articles/5733873.html CPU像一本书,你不阅读的时候,你室友马上阅读,你准备阅读的时候,你室 ...

  8. maven项目报错--Cannot change version of project facet Dynamic Web Module to 3.0 Error in Eclipse

    错误原因: 使用ecplise构建的maven骨架默认支持的是web2.3的版本,当使用这个创建3.0版本的web项目时则会报这样的错误: Cannot change version of proje ...

  9. 安卓7.0拍照遇到 Uri暴露错误

    最近,项目又做到,调用摄像头拍照获取图片这个功能. 用以前的代码直接用,发现在Android7.0上使用时会出现问题. Android6.0之后,动态申请权限已成常态. 调用摄像头拍照获取图片这个功能 ...

  10. 【好书分享】容器网络到kubernetes网络

    Nginx 公司的 Michael Hausenblas 发布了一本关于 docker 和 kubernetes 中的容器网络的小册子.这份资料一共 72 页,是大家由浅入深的了解 Docker 和 ...