在Struts 2中,提供了另外一种直接使用领域对象的方式,就是让action实现com.opensymphony. xwork2.ModelDriven接口。ModelDriven让你可以直接操作应用程序中的领域对象(模型对象),允许你在Web层和业务逻辑层使用相同的对象。
ModelDriven接口中只有一个方法,如下:
该方法返回一个用于接收用户输入数据的模型对象。在页面中,这个模型对象中的属性可以直接通过属性名来访问(如username),而不需要使用形如“user.username”这种格式的表达式,在action中也不需要为这个模型对象提供JavaBean风格的getter和setter方法。
下面我们让在3.1节创建的LoginAction类实现ModelDriven接口,修改后的代码如例3-7所示。
例3-7 LoginAction.java
package org.sunxin.struts2.ch03.action;
import org.sunxin.struts2.ch03.model.User;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ModelDriven;
public class LoginAction implements Action,ModelDriven<User>
{
private User user = new User();
@Override
public String execute() throws Exception
{
…
//省略
}
@Override
public User getModel()
{
return user;
}
}
|
修改过的部分以粗体显示。
修改login.jsp,修改后的代码如例3-8所示。
例3-8 login.jsp
…
<form action="login.action" method="post">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="password"></td>
</tr>
<tr>
<td><input type="reset" value="重填"></td>
<td><input type="submit" value="登录"></td>
</tr>
</table>
</form>
…
|
修改过的部分以粗体显示。LoginAction实现了ModelDriven接口,表单字段就不需要再使用 “user.”前缀了。
修改success.jsp,修改后的代码如例3-9所示。
例3-9 success.jsp
…
<body>
<h3><s:property value="username" />,欢迎您登
录程序员之家网站(www.sunxin.org)。</h3>
</body>
…
|
修改过的部分以粗体显示。
完整的项目代码请参看本书配套光盘中的ch03_2目录,测试时,输入URL:
http://localhost:8080/ch03_2/login.jsp
那么什么时候应该直接使用领域对象,什么时候应该实现ModelDriven接口呢?这两种方式实际上并没有本质的区别,对于大多数的应用,使用任何一种方式都可以。
分享到:
相关推荐
这篇博客文章可能详细探讨了如何在Struts2中使用ModelDriven接口来接收和处理请求参数。 ModelDriven接口允许开发者将一个对象绑定到Action上下文中,这个对象可以被用来存储和传递业务逻辑层的数据。当Action类...
本示例主要讲解了如何在Struts2中传递参数以及使用ModelDriven模式。首先,我们来逐一解析涉及的知识点。 1. **Struts2框架**:Struts2是Apache软件基金会的一个开源项目,它是基于MVC设计模式的Web应用框架,旨在...
在Struts2中,ModelDriven接口是一个非常实用的功能,它可以帮助我们更方便地处理Action类中的模型数据。这个项目案例和视频教程主要针对初学者,旨在深入理解如何使用Struts2的ModelDriven机制来接收和传递参数。 ...
在Struts2中,URL的设计对于RESTful服务至关重要,因为它决定了HTTP请求如何映射到特定的方法。例如,`/movies/Thrillers`这样的URL可以映射到`show`方法,通过`id="Thrillers"`参数来获取或展示指定类型的电影。...
- **Struts2**: Struts2中的Action更像是工厂模式下的产品,每个Action实例都是线程安全的。Struts2提供了ActionSupport基类来简化Action的实现。Action本身可以是任何实现了特定接口的Java对象,甚至是普通的POJO。...
例如,在 Action 中实现了 ModelDriven 接口,可以在 JSP 页面中使用 `user2!add?userName=MGC` 的方式将参数传递给 Action。 实例 在 Struts2 项目中,需要在 web.xml 和 struts.xml 文件中进行配置。web.xml ...
在Struts2中,ModelDriven接口主要用于处理Action类中的模型数据,使得开发者无需在Action类中定义所有可能的业务对象属性,而是通过实现该接口将模型直接绑定到请求参数上。 【拦截器(Interceptor)】是Struts2...
1. **Action**:在Struts2中,Action是业务逻辑的载体,负责处理用户请求。Action类通常会与Service层交互,完成特定的业务功能。 2. **配置**:Struts2的配置分为XML配置和注解配置两种方式。XML配置文件(struts....
Struts2内置了对OGNL的支持,可以方便地在JSP页面中使用OGNL表达式获取模型数据。 - **标签库**:Struts2提供了丰富的标签库,可以帮助开发者快速构建表单和页面元素,提高开发效率。 - **拦截器**:拦截器是Struts2...
1. **Action类**:在Struts2中,业务逻辑通常封装在Action类中。Action类是处理用户请求的实体,它执行特定的业务操作,并通过返回值决定后续的页面流向。 2. **配置文件**:Struts2的核心配置文件是struts.xml,它...
`Struts2Day2_modelDriven`可能涉及Struts2中的ModelDriven模式。此模式允许开发者将业务逻辑对象与Action类关联,减少Action类中的代码量。通过实现ModelDriven接口,Action类可以自动绑定一个模型对象,简化了...
1. **Action和Result**:Struts2中的核心组件是Action类,它代表了应用程序中的业务逻辑。当用户进行操作时,请求会被映射到相应的Action,执行完业务逻辑后,会通过Result返回相应的视图。Result可以是JSP、...
1. **Action类**:在Struts2中,Action类是业务逻辑的主要载体。每个Action类对应一个用户请求,处理相应的业务逻辑,并返回一个结果。 2. **配置文件**:通常包括struts.xml,这是Struts2的核心配置文件,用来定义...
- **Action类**:在Struts2中,Action类是处理用户请求的中心组件,它封装了业务逻辑,并通过调用Service层来处理实际的业务操作。 - **配置文件**:`struts.xml`是Struts2的主要配置文件,用于定义Action、结果...
5. **ModelDriven模式**:在Struts2中,ModelDriven模式可以帮助简化Action类的编写。通过实现`ModelDriven`接口,Action类可以自动绑定模型对象到请求参数,减少代码量。 6. **Service层**:在Spring中,业务逻辑...
在这个例子中,可能讲解了如何创建Model对象,如何在Action中实现ModelDriven接口,以及如何在JSP页面中使用这些模型属性。 总之,Struts2提供了灵活的方式来接收和处理HTTP请求中的参数,这使得开发者能够根据项目...
3. **OGNL(Object-Graph Navigation Language)**: OGNL是Struts2中的表达式语言,用于在Action、ValueStack和视图层之间传递数据。 4. **Tiles插件**: 提供布局和组合页面的功能,便于创建复杂的视图结构。 5. *...
- 在web.xml中添加Struts2的过滤器配置: ```xml <filter-name>struts2 <filter-class>org.apache.struts2.dispatcher.FilterDispatcher <filter-name>struts2 <url-pattern>/* ``` - 上述配置表示...
在Struts2框架中,ModelDriven接口用于将Action与模型对象进行绑定,这样可以更方便地进行数据处理。然而,在实现ModelDriven接口后,有时候会遇到无法返回JSON格式数据的问题。通常,这一问题可能是因为Struts2默认...
- **Struts2**虽然不再强制要求使用ActionForm模式,但仍然支持类似的功能,例如通过ModelDriven模式或使用Struts2的类型转换机制来处理用户输入。 #### 视图技术的支持 - **Struts1**支持使用JSTL标签库和EL表达式...