`
umgsai
  • 浏览: 109658 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

Struts2中ModelDriven的陷阱及其预防

 
阅读更多

页面表单

<form action="updateInput.action" method="post">
    <input type="text" name="id"/>
    <input type="submit" value="查询">
</form>

struts.xml配置

<action name="updateInput" class="com.test.UserAction" method="updateInput">
    <result name="update_input">user_update.jsp</result>
</action>

com.test.UserAction

public class UserAction implements ModelDriven {
 
    private User user;
 
    @Override
    public Object getModel() {
        if (user == null) {
            user = new User();
        }
        return user;
    }
 
    public String updateInput() {
        //测试ModelDriven陷阱
        // 根据ID,查询数据库,得到User对象
        Object object = ActionContext.getContext().getValueStack().findValue("#root");
        Connection connection = DBConnection.getConnection();
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        User user1 = null;
        try {
            System.out.println("查询用户信息");
            preparedStatement = connection
                    .prepareStatement("select * from t_user where id = ?");
            preparedStatement.setInt(1, user.getId());
            resultSet = preparedStatement.executeQuery();
             
            if (resultSet.next()) {
                user1 = new User();
                user1.setId(resultSet.getInt("id"));
                user1.setUsername(resultSet.getString("username"));
                user1.setPassword(resultSet.getString("password"));
//              user = user1;//这样写有问题
//值栈中的user并没有引用user1,所以在页面上取值实际上并没有取到user1的值。
//将user1的属性copy到user中之后,就可以在页面上取到值了。
                BeanUtils.copyProperties(user, user1);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            DBConnection.close(resultSet, preparedStatement, connection);
        }
        return "update_input";
    }
}

user_update.jsp

<form action="user_update.action" method="post">
        <input type="hidden" name="method:update">
        id:<input type="text" name="id" value="<s:property value="id"/>"> <br/>
        username:<input type="text" name="username" value="<s:property value="username"/>"> <br/>
        password:<input type="text" name="password" value="<s:property value="password"/>"> <br/>
        <input type="submit" name="submit" value="更新用户">
</form>


分享到:
评论

相关推荐

    Struts2_ModelDriven接收参数(项目案例及视频)

    在Struts2中,ModelDriven接口是一个非常实用的功能,它可以帮助我们更方便地处理Action类中的模型数据。这个项目案例和视频教程主要针对初学者,旨在深入理解如何使用Struts2的ModelDriven机制来接收和传递参数。 ...

    Struts2接收参数ModelDriven

    在Struts2中,ModelDriven是它提供的一种处理模型数据的机制,能够帮助开发者更方便地管理和传递Action类中的模型数据。这篇博客文章可能详细探讨了如何在Struts2中使用ModelDriven接口来接收和处理请求参数。 ...

    struts2传递参数及ModelDriven的使用示例

    本示例主要讲解了如何在Struts2中传递参数以及使用ModelDriven模式。首先,我们来逐一解析涉及的知识点。 1. **Struts2框架**:Struts2是Apache软件基金会的一个开源项目,它是基于MVC设计模式的Web应用框架,旨在...

    strusts2包struts2-rest-showcase-2.1.8.war实现ModelDriven接口项目心得

    在本文中,我们将深入探讨如何使用Struts2的`ModelDriven`接口以及如何控制URL,以实现`struts2-rest-showcase-2.1.8.war`项目中的功能。 首先,`ModelDriven`接口是Struts2提供的一种设计模式,用于将Action类与...

    struts1和struts2的区别

    此外,Struts2还支持ModelDriven模式,允许使用模型对象来代替Action。 #### 表达式语言 - **Struts1**: 支持JSTL标签库以及EL表达式。但是,相比于Struts2,其功能较为有限。 - **Struts2**: 支持JSTL的同时,...

    Struts2视频教程

    - **适用范围**:Struts2广泛应用于企业级Java Web项目的开发中,特别是那些需要处理大量用户交互和数据展示的应用。 #### 二、Struts2入门案例 - **Hello Struts2**:通过创建一个简单的“Hello World”示例,...

    Struts2 Struts2 超好的Struts2 pdf 文档

    Struts2是一个基于MVC(Model-View-Controller)设计模式的Java web应用程序框架,它在Web开发领域中被广泛使用。这个“超好的Struts2 pdf 文档”很可能包含了关于Struts2的全面介绍、核心概念、配置、拦截器、结果...

    Struts2中Action接收参数的方法

    Struts2 框架中,Action 组件可以通过多种方式接收参数,这些方式包括使用 Action 的属性、使用 DomainModel 和使用 ModelDriven。下面将详细介绍这些方法: 使用 Action 的属性接收参数 在 Struts2 中,可以使用 ...

    ModelDriven

    【ModelDriven】是Struts2框架中的一个核心接口,它简化了模型与视图的数据绑定过程,提高了开发效率。在Struts2中,ModelDriven接口主要用于处理Action类中的模型数据,使得开发者无需在Action类中定义所有可能的...

    struts2中文帮助文档

    1. **Action和Result**:Struts2中的核心组件是Action类,它代表了应用程序中的业务逻辑。当用户进行操作时,请求会被映射到相应的Action,执行完业务逻辑后,会通过Result返回相应的视图。Result可以是JSP、...

    Struts2_Action学习笔记、通配符{1},{2}

    - 在web.xml中添加Struts2的过滤器配置: ```xml &lt;filter-name&gt;struts2 &lt;filter-class&gt;org.apache.struts2.dispatcher.FilterDispatcher &lt;filter-name&gt;struts2 &lt;url-pattern&gt;/* ``` - 上述配置表示...

    struts2框架做的学生信息查询系统

    5. **模型驱动(ModelDriven)**:Struts2提供了ModelDriven接口,允许Action类通过关联一个模型对象来简化数据处理。在这个系统中,可能有一个`Student`模型类,用来封装学生信息,Action可以直接操作这个模型对象...

    Struts2Day2

    `Struts2Day2_modelDriven`可能涉及Struts2中的ModelDriven模式。此模式允许开发者将业务逻辑对象与Action类关联,减少Action类中的代码量。通过实现ModelDriven接口,Action类可以自动绑定一个模型对象,简化了...

    struts2简单案例

    - **ModelDriven模式**:Struts2提供了ModelDriven模式,可以直接将模型对象绑定到Action,简化JSP中的数据展示。 4. **实例分析** - "struts2_damo3"可能包含了一个简单的登录或注册案例。Action类处理用户提交...

    struts2+spring练习

    5. **ModelDriven模式**:在Struts2中,ModelDriven模式可以帮助简化Action类的编写。通过实现`ModelDriven`接口,Action类可以自动绑定模型对象到请求参数,减少代码量。 6. **Service层**:在Spring中,业务逻辑...

    struts2 接收参数

    在`Struts2_0900_ModelDrivenParamInput`这个文件中,可能包含了关于Struts2 0.9.0版本如何处理ModelDriven模式下参数输入的示例代码。ModelDriven模式简化了Action类的编写,使得业务逻辑更专注于处理业务,而不是...

    struts2开发文档

    3. **添加JAR包**: 在项目中,需要将Struts2的核心库和其他依赖库(如commons-logging-api、freemarker、ognl、struts2-core和xwork等)添加到类路径,以便框架能正常工作。 4. **配置web.xml**: 在`web.xml`文件中...

    Struts2-2.2.1

    Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架,它在Web开发领域中被广泛使用。2.2.1是Struts2的一个版本,这个版本发布于2010年,是Struts2发展过程中的一个重要里程碑。这个版本...

    使用struts2写的小项目

    1. **Action类**:在Struts2中,Action类是业务逻辑的主要载体。每个Action类对应一个用户请求,处理相应的业务逻辑,并返回一个结果。 2. **配置文件**:通常包括struts.xml,这是Struts2的核心配置文件,用来定义...

Global site tag (gtag.js) - Google Analytics