zoukankan      html  css  js  c++  java
  • Struts2 学习笔记--Action Method--接收参数

    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> 

  • 相关阅读:
    【剑指offer】10 矩形覆盖
    【剑指offer】09 变态跳台阶
    【剑指offer】08 跳台阶
    【剑指offer】07 斐波那契数列
    【剑指offer】06 旋转数组的最小数字
    【剑指offer】05 用两个栈实现队列
    【剑指offer】04 重建二叉树
    【剑指offer】03 从尾到头打印链表
    【剑指offer】02 替换空格
    【剑指offer】01 二维数组中的查找
  • 原文地址:https://www.cnblogs.com/Ricezhang/p/4561630.html
Copyright © 2011-2022 走看看