Struts2下怎么配置Action

本篇内容主要讲解“Struts2下怎么配置Action”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Struts2下怎么配置Action”吧!

站在用户的角度思考问题,与客户深入沟通,找到开平网站设计与开平网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站建设、做网站、企业官网、英文网站、手机端网站、网站推广、域名注册、网络空间、企业邮箱。业务覆盖开平地区。

Action基本配置

Struts 2使用package包来组织Action,在struts.xml中通过使用package下的action元素来配置Action。在配置Action时,需要指定action元素的name和class属性。

  1. name属性:指定Action的名字,即指明该Action所处理的请求的URL,例如,若name属性值为login,则请求该Action的URL是login.action

  2. class属性:指定Action的实现类,该属性不是必须的,如果没有指定class属性的值,则默认使用ActionSupport类。

Action基本配置代码如下:


  

Action只是一个逻辑控制器,不直接对用户请求生成任何相应。因此,Action处理完用户请求后需要将指定的视图资源呈现给用户,即配置Action时,应该配置逻辑视图和物理视图资源之间的映射。

配置逻辑视图和物理视图之间的映射关系是通过元素来定义的,每个元素定义逻辑视图和物理视图之间的一个映射:


  
  /success.jsp
  /error

动态方法调用

有时一个Action内需要包含多个控制处理逻辑。例如,对于同一个表单,当用户通过不同的提交按钮进行提交时,系统需要使用Action的不同方法进行处理用户请求,此时就需要让Action中包含多个控制处理逻辑。

Struts 2框架允许一个Action中包含多个处理逻辑。在Struts 2中请求一个Action中的不同处理逻辑方法的方式成为DMI(Dynamic Method Invocation,动态方法调用),其请求格式如下:

(ActionName)!(methodName).action
  1. ActionName是Action的名字,即struts.xml中配置的Action的name属性值;

  2. methodName是Action实现类中处理逻辑的方法名。

动态方法调用示例

//访问product中的edit()方法
product!edit.action

productList.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>



商品列表


  
    
      商品ID
      商品名称
      数量
      操作
    
    
      1001
      小米手机
      128
      编辑
      删除
    
    
      1002
      佳能相机
      100
      编辑
      删除
    
  

```

上述代码中,商品列表中的每个商品使用超链接进行编辑、删除操作。超链接中href属性值采用动态方法调用的方式进行链接请求,并将产品ID作为参数传递给Action。

ProductAction.java代码如下:

package com.qst.chapter03.action;

import com.opensymphony.xwork2.ActionSupport;

public class ProductAction extends ActionSupport {
  private int productId;

  public int getProductId() {
    return productId;
  }

  public void setProductId(int productId) {
    this.productId = productId;
  }

  // 编辑商品
  public String edit() {
    System.out.println("编辑商品" + productId);
    // ...省略一些编辑商品的业务
    return "edit";
  }

  // 删除商品
  public String del() {
    System.out.println("删除商品" + productId);
    // ...省略一些删除商品的业务
    return "del";
  }
}

上述代码创建了两个业务方法edit()和del()方法。当用户单击不同的链接时,系统将交给对应的方法处理。

接下来编写edit.jsp和del.jsp页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>




编辑商品


  ${param.productId}商品编辑

<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>




删除商品


  ${param.productId}商品删除成功!

在struts.xml中配置ProductAction代码如下所示:





  
  
  

  
  
    
    
      /edit.jsp
      /del.jsp
    
  

上述配置文件配置了常量struts.enable.DynamicMethodInvocation的值为true,这样Struts 2才会开启动态方法调用,否则默认不会开启动态方法调用。

使用method属性及通配符

除了动态方法调用之外,Struts 2还提供了另一种处理方法,即将Action处理类定义成多个逻辑Action。此时,在配置元素时,需要指定name、class和method属性。这样就可以让Action调用指定方法,而不是execute()方法来处理用户请求。

例如可以将ProductAction类定义成两个逻辑Action,即将该类中的edit()和del()方法映射成不同的Action,示例代码如下:


  /edit.jsp


  /del.jsp

上述代码定义了editproduct和delproduct两个逻辑Action,这两个Action对应的处理类都是ProductAction,但处理逻辑不同。分别对应的是edit()和del()方法。

上面的这种方式虽然能够实现,但两个定义绝大部分是相同的,带来冗余问题。Struts 2还提供了通配符“ * ”来解决这个问题。利用通配符在定义Action的name属性时使用模式字符串(即用“ * ”代表一个或多个任意字符串),接下来就可以在class、method属性以及子元素中使用{N}的形式代表前面第N个星号“ * ”所匹配的子串。

* 通配符


  
  
    
      /edit.jsp
      /del.jsp
    
  

上述代码Action的name属性值为“ * product”,使用了通配符,此时定义的不是一个普通的Action,而是定义了一系列的逻辑Action,只要用户请求的URL符合“ * product.action”的模式,都可以通过ProductAction处理。此外,必须要指定method属性,method属性用于指定用户请求的方法。在method属性中使用表达式{1},代表该表达式就是name属性值中第一个“ * ”指代的值。通过上述配置规则可以达到与动态调用同样的运行效果。

此外Struts 2允许在class属性和method属性中同时使用表达式,例如:

复制代码 代码如下:


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持创新互联。

到此,相信大家对“Struts2下怎么配置Action”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!


文章名称:Struts2下怎么配置Action
网页网址:http://scyanting.com/article/jdejpc.html