• Struts2笔记2--动态方法调用和Action接收请求方式


    动态方法调用(在请求的时候,再明确具体的响应方法,配置的时候不明确):

      LoginAction类中有两个方法some和second

      1. 动态方法的调用(修改常量struts.enable.DynamicMethodInvocation):

    1 <struts>
    2     <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
    3     <package name="demo" namespace="/test" extends="struts-default">
    4         <action name="login" class="com.tongji.actions.LoginAction">
    5             <result name="some">/some.jsp</result>
    6             <result name="second">/second.jsp</result>
    7         </action>
    8     </package>
    9 </struts>

      html路径请求时使用 login!some.action 这种格式。

      2. 使用通配符定义的Action: 

    1 <struts>
    2     <package name="demo" namespace="/test" extends="struts-default">
    3         <action name="login_*" class="com.tongji.actions.LoginAction" method="{1}">
    4             <result name="some">/some.jsp</result>
    5             <result name="second">/second.jsp</result>
    6         </action>
    7     </package>
    8 </struts>

      html路径请求时使用 login_second.action 这种格式。

     Action接收请求参数:

      1. 属性驱动方式

        指服务器段接收来自客户端的离散数据的方式。用户提交的数据,Action原封不动的进行逐个接收。该接收方式要求,在Action类中定义与请求参数同名的属性,即定义该属性的set方法这样就能够使Action自动将请求参数的值赋予同名属性

      2. 域驱动方式

        指服务器端以封装好的对象方式接收来自客户端的数据方式。将用户提交的多个数据以封装的方式进行整体提交。该方式要求,表单提交时,参数以对象属性的方式提交而Action中要将同名的对象定义为属性(为其赋予getter和setter)这样请求将会以封装好的对象数据形式提交给Action

        Action中定义:

    1 private Student student;  //域属性,即对象属性
    2 
    3 public Student getStudent() {
    4     return student;
    5 }
    6 
    7 public void setStudent(Student student) {    
    8     this.student = student;
    9 }

        表单提交时:

        用户名:<input type="text" name="student.name"/><br>
             年龄:<input type="text" name="student.age"/><br>

        页面获取参数时:

        name = ${student.name}<br>
           age = ${student.age}<br>

      3. 集合数据接收

        指以集合对象方式接收数据。此情况与与域驱动接收数据原理是相同的。注意,必须是集合,不能是数组,因为数组不能自动扩展

        Action中定义:

    1 private List<Student> students;  
    2 
    3 public List<Student> getStudents() {
    4     return students;
    5 }
    6 
    7 public void setStudents(List<Student> students) {
    8     this.students = students;
    9 }

        表单提交时:

        用户名:<input type="text" name="students[0].name"/><br>
             年龄:<input type="text" name="students[0].age"/><br>

        页面获取参数时:

        name = ${students[0].name}<br>
           age = ${students[0].age}<br>

      4. ModelDriven方式

        ModelDriven接收请求参数运行背后使用了Struts2的核心功能ValueStack。Struts2的默认拦截器中存在一个拦截器ModelDrivenInterceptor。当一个请求经过该拦截器时,在这个拦截器中,首先会判断当前调用的Action对象是否实现了ModelDriven接口。如果实现了这个接口,则调用getModel()方法,并把返回值压入ValueStack栈顶。

     1 public class LoginAction implements ModelDriven<Student> {
     2     private Student student;
     3 
     4    public String execute() {
     5        return "success";
     6    }
     7 
     8    @Override
     9    public Student getModel() {
    10        if (student == null) {
    11          student = new Student();
    12       }
    13        return student;
    14    }
    15 }

        表单提交时:

        用户名:<input type="text" name="name"/><br>
             年龄:<input type="text" name="age"/><br>

        页面获取参数时:

        name = ${name}<br>
           age = ${age}<br>

  • 相关阅读:
    hbase权威指南PDF下载
    流畅的pythonPDF下载
    现代操作系统PDF下载
    Kafka权威指南PDF下载
    java核心技术卷1PDF下载
    计算机网络自顶向下方法PDF下载
    git gitlab 部署
    MySQL 索引、事务与存储引擎(详细解读)
    QT: Layout布局间消除间隙(修改layout内置参数)
    数据结构---归并排序
  • 原文地址:https://www.cnblogs.com/qjjazry/p/6227305.html
Copyright © 2020-2023  润新知