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. 《ASP.NET MVC 5 破境之道》:第一境 ASP.Net MVC5项目初探 — 第二节:MVC5项目结构

    第一境 ASP.Net MVC5项目初探 — 第二节:MVC5项目结构 接下来,我们来看看,VS为我们自动创建的项目,是什么样子的? 可以通过菜单中[View]->[Solution Explo ...

  2. Algebraic Kernel ( Arithmetic and Algebra) CGAL 4.13 -User Manual

    1 Introduction Real solving of polynomials is a fundamental problem with a wide application range. T ...

  3. Flask 视图,模板,蓝图.

    https://www.cnblogs.com/wupeiqi/articles/7552008.html 1. 配置文件 from flask import Flask app =Flask(__n ...

  4. FunDA(5)- Reactive Streams:Play with Iteratees

    FunDA的设计目标就是把后台数据库中的数据搬到内存里,然后进行包括并行运算的数据处理,最后可能再对后台数据库进行更新.如果需要把数据搬到内存的话,那我们就必须考虑内存是否能一次性容纳所有的数据,有必 ...

  5. webpack快速入门——CSS进阶,Less文件的打包和分离

    1.要使用less,首先使用npm安装less服务 cnpm install less --save-dev 还需要安装Less-loader用来打包使用. cnpm install less-loa ...

  6. .Net - WebApi

    WebApi C#进阶系列 - WebApi: WebApi 服务监控 + log4net:

  7. ionic的基础学习(第一篇)

    1.ioinc的头部与底部 1.Header 固定在屏幕的顶端的组件,可包含标题,左右的功能按钮.(提供很多颜色的样式,及调用不同的样式名,亦可自定义) bar-light,bar-stable,ba ...

  8. JS: 数据结构与算法之栈

    栈 先来看一道题 Leetcode 32 Longest Valid Parentheses (最长有效括号) 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度. 示例 ...

  9. SLAP(Speaker-Listener Label Propagation Algorithm)社区发现算法

    其中部分转载的社区发现SLPA算法文章 一.概念 社区(community)定义:同一社区内的节点与节点之间关系紧密,而社区与社区之间的关系稀疏. 设图G=G(V,E),所谓社区发现是指在图G中确定n ...

  10. SQL中文转拼音

    使用下方的函数.. 忘了从哪抄的了..留存一份 如果只要首字母..建议将数据  Left(tableFiled,1) 后传入函数 如果字段是空或者null, 不会报错..返回空 方法体: SET AN ...