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. DevExpress WinForms Controls 学习系列1

    一个偶然的机会,接触到DevExpress.项目是WinForm的,应用了DevExpress.为了使项目具备维护开发的生命力,我觉得有必要系统的学习一下DevExpress,今天是学习笔记的第一篇. ...

  2. 【cocos2d-x 手游研发----界面UI设计】

    简单探讨一下如何在cocos2d-x的游戏引擎里面去制作各做交互UI界面,常见的UI如下: 人物头像,血条值,经验条,技能按钮,以及各种玩家交互的界面按钮:背包,人物属性,门派,等: 类似上面的图示交 ...

  3. Java中的split和join

    Javascript中的用于字符串和数组之间转换的split和join函数使用起来非常方便,在Java中也有这两个函数,只不过join是在apache commons的lang库里实现的. impor ...

  4. Restframework 视图组件与序列号组件的应用.

    models from django.db import models # Create your models here. class Course(models.Model): title=mod ...

  5. SPOJ Longest Common Substring II

    题目连接:戳我 题目大意:求n个字符串的最长公共子串. 它的简化版--这里 当然我们可以用SA写qwq,也可以用广义SAM写qwq 这里介绍纯SAM的写法...就是对其中一个建立后缀自动机,然后剩下的 ...

  6. 伸展树的实现——c++

     一.介绍 伸展树(Splay Tree)是一种二叉排序树,它能在O(log n)内完成插入.查找和删除操作.它由Daniel Sleator和Robert Tarjan创造.(01) 伸展树属于二叉 ...

  7. 操作系统(Operating System,OS)

    操作系统(Operating System,OS) 是配置在计算机硬件上的第一层软件,是对计算机硬件系统的首次扩充,是一个计算机系统最基础,也是最重要的系统软件. 操作系统的作用 1 实现对计算机资源 ...

  8. git连接通过ssh连接github

    解决 git连接通过ssh连接github 1. 首先产生一个rsa的私钥和公钥 ssh-keygen -t rsa -C "15950093214@163.com"  //你的g ...

  9. ubuntu sudo: pip:找不到命令

    编辑文件 /etc/sudoers sudo vi /etc/sudoers 将Defaults env_reset ,改为 Defaults    !env_reset 编辑文件-/.bashers ...

  10. Centos6.7安装Pycharm及升级JDK

    首先到pycharm官网下载pycharm压缩包 wget https://www.jetbrains.com/pycharm/download/download-thanks.html?platfo ...