Struts2 Action参数接收:属性、DomainModel与ModelDriven

需积分: 25 2 下载量 5 浏览量 更新于2024-09-21 收藏 65KB DOC 举报
"Struts2框架允许Action类以多种方式接收请求参数,主要涉及Action的属性、DomainModel以及ModelDriven接口。以下是对这三种方法的详细说明:" 1. 使用Action的属性接收参数 - 定义:在Action类内部,声明一个与请求参数名称相匹配的私有属性,例如`private String userName;`,然后提供对应的getter和setter方法,如`public String getUserName(){}` 和 `public void setUserName(String userName){}`。 - 接收:当Struts2处理请求时,会自动调用setter方法将请求参数值赋给Action的属性。例如,如果URL中有`?userName=Magic`,Struts2会调用`setUserName("Magic")`。 - 发送:在JSP或其他视图层组件中,可以通过`user1!add`这样的Action方法引用,并在URL中以`userName=Magic`的形式传递参数。 2. 使用DomainModel接收参数 - 定义:创建一个独立的Model类,比如`User`,包含相应的属性和getter/setter方法。在Action类中,声明一个`User`类型的属性,但不需要手动创建对象,例如`private User user;`。 - 接收:Struts2会自动创建Model对象并调用setter方法填充属性,Action可以通过`user.getUserName()`来访问请求参数。 - 发送:在请求URL中,参数以`user2!add?user.userName=MGC`的方式传递,这里的`user`是Model对象的属性名,`userName`是Model类中的属性。 3. 使用ModelDriven接口接收参数 - 定义:让Action类实现`ModelDriven`接口,这个接口要求实现`getModel()`方法,返回Model对象。通常在Action类中会有一个Model类的实例,如`private User user = new User();`。 - 接收:Struts2会调用`getModel()`方法获取Model对象,然后自动填充参数,Action同样通过`user.getUserName()`访问参数。 - 发送:请求URL中的参数传递方式与使用DomainModel相同,即`user2!add?userName=MGC`。 在配置文件`web.xml`中,Struts2过滤器是必要的,它定义了Struts2的拦截器链,使得Action能够正确地接收和处理请求。示例配置如下: ```xml <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ``` 这些配置确保了所有请求都会经过Struts2框架,使得Action可以利用上述方法接收参数。Struts2的这种灵活性使得开发人员可以根据项目需求选择最合适的方式来处理请求参数。