`

转:struts2从请求取值的三种方式

阅读更多
Struts2作为WEB框架,必不可少的需要请求中取值。(我在这里说是从请求中取值对于一些读者可能有些晦涩,其实如果我说从页面取值可能就好理解一点了,但除了从已经存在的页面里面能够给后台传值,在地址栏里也可以传,甚至在java代码里也是可以的。)

这里就谈谈struts如何从请求中取值。

我介绍三种方式:

三种取值方式:
1,使用默认的action的传递方式。
2,自定义一个vo,在action中使用这个vo
3,使用ModelDriven的方式。



一、使用默认的action的传递方式

如果我们的请求里面带有两个参数userName和passWord的话,我们只需要在Action里有这两个私有属性就可以了。

请看我的Action:

package study.getValue;

import com.opensymphony.xwork2.Action;

/**

* 在Action中定义请求里面传过来的值,

* 并且定义所有的Setter和Getter

* 这样可以直接在功能方法里面直接使用这些值。

* @author  arne3166

* @version  [0100, 2010-9-30]

*/

public class LoginAction

{

    private String userName;//页面里面的userName

    private String passWord;//页面里面的passWord

    //必须的setter和getter方法

    public String getUserName();

    public void setUserName(String userName);

    public String getPassWord();

    public void setPassWord(String passWord);    

    //业务逻辑   

    public String execute()

    {

        if (null!= userName && null != passWord

            && userName.equals("arne3166") && passWord.equals("111111"))

        {

            return Action.SUCCESS;

        }

        else

        {

            return Action.ERROR;

        }

    }

}


复制代码在struts .xml里面的配置

<action name="loginput" >

        <result>/page/getValue/login_input.jsp</result>

</action>

<action name="login" class="study.getValue.LoginAction">

        <result name="success">/page/getValue/success.jsp</result>

        <result name="error">/page/getValue/fail.jsp</result>

</action>


复制代码看jsp是怎么写的:


<form action="login.action"><!-- name="userName" 和 name="passWord"同Action里面的私有属性对上 -->

用户名:<input name="userName" type="text"/>用户密码<input name="passWord" type="password"/>

<input type="submit" value="提交"/>

</form>


二、自定义一个vo,在action中使用这个vo

区别于以上的方式,Struts2中允许将页面的值封装起来,放到一个ValueObject(VO)中。就比如上面的例子中的userName和passWord,完全可以放到一个User类中。这样做的好处是,避免如果Action中如果有好多这样的值的话,太多的setter和getter会使得Action看起来比较臃肿的毛病。

看看我们是怎么做的

首先定义User

Java代码
package study.getValue.vo;   
public class User   
{   
    //页面中的值的封装   
    private String userName;   
    private String passWord;   
    //所有的setter和getter   
    public String getUserName();   
    public void setUserName(String userName);   
    public String getPassWord();   
    public void setPassWord(String passWord);   
}  

package study.getValue.vo;
public class User
{
    //页面中的值的封装
    private String userName;
    private String passWord;
    //所有的setter和getter
    public String getUserName();
    public void setUserName(String userName);
    public String getPassWord();
    public void setPassWord(String passWord);
}


再看Action被简化成了什么样子
Java代码

package study.getValue;   
import com.opensymphony.xwork2.Action;   
import study.getValue.vo.User;   
/**  
*  
* 在Action中定义请求里面传过来Vo,  
* 并且定义VO的Setter和Getter  
* 使用页面参数的时候像使用Vo的属性一样。  
* @author  arne3166  
* @version  [0100, 2010-9-30]  
*/  
public class VoLoginAction   
{   
    //将vo作为私有属性   
    private User u;   
    //setter和getter必不可少   
   public User getU();   
    public void setU(User u);   
    public String execute()   
    {   
        String userName = u.getUserName();   
        String passWord = u.getPassWord();   
        if (null!= userName && null != passWord   
            && userName.equals("arne3166") && passWord.equals("111111"))   
        {   
            return Action.SUCCESS;   
        }   
        else  
        {   
            return Action.ERROR;   
        }   
    }   
}  

package study.getValue;
import com.opensymphony.xwork2.Action;
import study.getValue.vo.User;
/**
*
* 在Action中定义请求里面传过来Vo,
* 并且定义VO的Setter和Getter
* 使用页面参数的时候像使用Vo的属性一样。
* @author  arne3166
* @version  [0100, 2010-9-30]
*/
public class VoLoginAction
{
    //将vo作为私有属性
    private User u;
    //setter和getter必不可少
   public User getU();
    public void setU(User u);
    public String execute()
    {
        String userName = u.getUserName();
        String passWord = u.getPassWord();
        if (null!= userName && null != passWord
            && userName.equals("arne3166") && passWord.equals("111111"))
        {
            return Action.SUCCESS;
        }
        else
        {
            return Action.ERROR;
        }
    }
}

这样做了,页面任然用原来的当然是不行的,注意到Action中的user对象的引用是u,那么,在页面里面userName也需要修改成u.userName,passWord也应当修改成u.passWord

Html代码
<!--login_input_vo.jsp name="u.passWord"和name="u.passWord"是对Action中User对象进行映射 -->  
<form action="loginvo.action">  
用户名:<input name="u.userName" type="text"/>用户密码<input name="u.passWord" type="password"/>  
<input type="submit" value="提交"/>  
</form>  

<!--login_input_vo.jsp name="u.passWord"和name="u.passWord"是对Action中User对象进行映射 -->
<form action="loginvo.action">
用户名:<input name="u.userName" type="text"/>用户密码<input name="u.passWord" type="password"/>
<input type="submit" value="提交"/>
</form> 


再看看配置文件

Xml代码
<action name="loginputvo" >  
    <result>/page/getValue/login_input_vo.jsp</result>  
</action>  
<action name="loginvo" class="study.getValue.VoLoginAction">  
    <result name="success">/page/getValue/success.jsp</result>  
    <result name="error">/page/getValue/fail.jsp</result>  
</action>  

<action name="loginputvo" >
        <result>/page/getValue/login_input_vo.jsp</result>
</action>
<action name="loginvo" class="study.getValue.VoLoginAction">
        <result name="success">/page/getValue/success.jsp</result>
        <result name="error">/page/getValue/fail.jsp</result>
</action> 成功失败后的页面没有什么好修改的。



三、使用模型驱动(ModelDriven)的方式。

上面的例子中在页面要写上u.userName,按照习惯前面的“u.”是不是可以不要呢,同时又能保持第二种方式里Action的“纯洁”,Struts2的模型驱动就可以做到。

从实现方式上面需要Action实现模型驱动的接口,先来看Action是怎么写的:



Java代码
package study.getValue;   
import study.getValue.vo.User;   
import com.opensymphony.xwork2.Action;   
import com.opensymphony.xwork2.ModelDriven;   
/**  
*  
* Action实现ModelDriven接口。  
* 在Action里定义一个私有变量User,这个User应该被new出来,  
* 不过里面的值是Strus来设置的  
* 不需要Setter和Getter方法  
* @author  arne3166  
* @version  [0100, 2010-9-30]  
*/  
public class ModelDrivenLoginAction implements ModelDriven<User>   
{   
    //需要将user对象new出来;   
    private User u = new User();   
    //实现的接口方法   
    @Override  
    public User getModel()   
    {   
        return u;   
    }   
    public String execute()   
    {   
        String userName = u.getUserName();   
        String passWord = u.getPassWord();   
        if (null!= userName && null != passWord   
            && userName.equals("arne3166") && passWord.equals("111111"))   
        {   
            return Action.SUCCESS;   
        }   
        else  
        {   
            return Action.ERROR;   
        }   
    }   
}  

package study.getValue;
import study.getValue.vo.User;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ModelDriven;
/**
*
* Action实现ModelDriven接口。
* 在Action里定义一个私有变量User,这个User应该被new出来,
* 不过里面的值是Strus来设置的
* 不需要Setter和Getter方法
* @author  arne3166
* @version  [0100, 2010-9-30]
*/
public class ModelDrivenLoginAction implements ModelDriven<User>
{
    //需要将user对象new出来;
    private User u = new User();
    //实现的接口方法
    @Override
    public User getModel()
    {
        return u;
    }
    public String execute()
    {
        String userName = u.getUserName();
        String passWord = u.getPassWord();
        if (null!= userName && null != passWord
            && userName.equals("arne3166") && passWord.equals("111111"))
        {
            return Action.SUCCESS;
        }
        else
        {
            return Action.ERROR;
        }
    }
} 


下面回到Sturts的配置文件



Xml代码
<action name="loginputmodeldriven" >  
    <result>/page/getValue/login_input_modeldriven.jsp</result>  
</action>  
<action name="loginmodeldriven" class="study.getValue.ModelDrivenLoginAction">  
    <result name="success">/page/getValue/success.jsp</result>  
    <result name="error">/page/getValue/fail.jsp</result>  
</action>  

<action name="loginputmodeldriven" >
        <result>/page/getValue/login_input_modeldriven.jsp</result>
</action>
<action name="loginmodeldriven" class="study.getValue.ModelDrivenLoginAction">
        <result name="success">/page/getValue/success.jsp</result>
        <result name="error">/page/getValue/fail.jsp</result>
</action> 


再看表单的页面



Java代码
 
<!--又回到原始简单的样式了O(∩_∩)O-->   
<form action="loginmodeldriven.action">   
用户名:<input name="userName" type="text"/>用户密码<input name="passWord" type="password"/>   
<input type="submit" value="提交"/>   
</form>  

<!--又回到原始简单的样式了O(∩_∩)O-->
<form action="loginmodeldriven.action">
用户名:<input name="userName" type="text"/>用户密码<input name="passWord" type="password"/>
<input type="submit" value="提交"/>
</form> 

这里注意一下,

这是必须的
//需要将user对象new出来;
private User u = new User();

如果不将user new出来的话,会在页面给你一个异常吃吃



Java代码
Struts Problem Report   
Struts has detected an unhandled exception:    
  
Messages:     
File: study/getValue/ModelDrivenLoginAction.java    
Line number: 23    
  
  
--------------------------------------------------------------------------------   
  
Stacktraces   
java.lang.NullPointerException    
    study.getValue.ModelDrivenLoginAction.execute(ModelDrivenLoginAction.java:23)   
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)   
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)   
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)   
    java.lang.reflect.Method.invoke(Method.java:597)  


转:http://www.85java.com/thread-1132-1-1.html
分享到:
评论

相关推荐

    Struts2 ——4、struts2从请求取值的三种方式

    在Struts2中,从请求取值是日常开发中的常见操作,有三种主要的方式可以实现这一功能。本篇将详细介绍这三种方法。 1. **Action上下文(ActionContext)** ActionContext是Struts2中一个关键的类,它提供了访问...

    struts2各控件详细注册页面,后台可以取值。

    2. **表单验证**:注册页面通常需要进行表单验证,Struts2提供了多种验证方式,如基于注解的字段验证、基于XML的验证配置以及编程式验证。这些验证机制可以在用户输入数据时实时检查并反馈错误信息。 3. **结果类型...

    [黑马程序员Struts2 2016版视频] 前3Days笔记

    Struts2是Java Web开发中一个非常重要的框架,它基于MVC(Model-View-Controller)设计模式,为开发者提供了一种结构化、易于维护的Web应用开发方式。本笔记主要涵盖的是黑马程序员2016年推出的Struts2教程的前3天...

    struts2.rar

    总的来说,"struts2.rar"中的"struts2.pdf"是学习和提升Struts2框架技能的宝贵资源,涵盖了从基础概念到实战技巧的全方位知识,对于开发者来说是一份不可多得的学习材料。如果你对Java Web开发有兴趣,特别是对...

    struts2实现国际化

    Struts2提供了一种简单而有效的方法来实现这一目标。 首先,我们需要理解国际化的基本概念。国际化(i18n)是使软件能够适应不同地区的文化、语言和格式的过程。这通常涉及到资源文件的使用,这些文件存储了应用中...

    Struts2 原理及搭建

    Struts2是一个基于MVC(Model-View-Controller)设计模式的开源Java Web框架,它在Web应用开发中被广泛使用,提供了强大的控制层来处理请求、管理业务逻辑和展示视图。Struts2的核心是Action类,它接收HTTP请求,并...

    Struts2 Value Stack Contents 中取值、多个集合数组

    在使用Struts2框架进行Web应用开发时,经常会遇到需要从Value Stack(值栈)中获取数据的场景,尤其是在表单验证中。Struts2的Value Stack是一种可以方便地在Action和JSP页面之间传递数据的机制。本文将详细介绍如何...

    struts2复习资料

    - `struts.i18n.encoding`:定义了Struts2处理请求时的字符编码,如设置为`gbk`则用于处理GBK编码的请求。 - `struts.action.extension`:指定默认Action请求的扩展名,通常默认是`action`,但可以通过配置更改为...

    牧紫小岩的Struts2学习笔记

    Struts2允许客户端产生的参数在`struts.xml`中通过`${}`语法进行取值,这里的取值并非来自EL表达式,而是从`StackContext`中获取,这是一种不同于传统EL表达式的参数处理方式。 #### MVC模式与Struts2架构 MVC...

    Xwork——Struts2核心

    ### Xwork——Struts2核心 #### Xwork与Struts2的关系 Xwork作为Struts2的核心组件之一,它的设计理念和技术实现对整个Struts2框架起着决定性的作用。Struts2是一个流行的Java Web开发框架,它采用了MVC(Model-...

    struts2取到页面的值

    在Struts2框架中,获取页面表单提交的值是一个常见的需求,这涉及到Struts2如何解析请求参数、如何在Action类中访问这些参数以及如何处理复杂的对象模型。以下将详细解析Struits2中获取页面值的方法,包括基本类型...

    struts标签手册

    - **赋值方式**:可以通过以下三种方式为新属性赋值: - 直接在标签体中设置值。 - 使用`name`、`property`和`scope`属性从已存在的bean中取值。 - 使用JSP表达式(EL)设置值。 **其他Bean Tags** - `bean:...

    struts2.0标签$ # %的区别

    -- 从请求作用域取值 --&gt; &lt;s:property value="#adminName" /&gt; &lt;!-- 从ActionContext取值 --&gt; &lt;s:set var="adminPassword" value="password" scope="session" /&gt; &lt;!-- 指定作用域 --&gt; &lt;s:property value="#admin...

    struts学习的一点笔记

    在深入探讨Struts框架的学习笔记之前,我们先简要回顾一下Struts框架的基本概念与重要性。Struts是一个开源的MVC(Model-View-Controller)框架,主要用于简化Java Web应用的开发。它提供了一套标准的方式来组织和...

    struts2-jasperreport-plugin-adjust2.1

    adjust2.1是adjust2.0的改良; adjust2.0解决了三个问题:1...若${rptAlone}取值为N,则为该配置的报表放在一个公共的目录下,此时存在上面提到的覆盖现象,此是默认方式,若采用这种默认方式,无需配置参数rptAlone;

    Java web人力资源管理项目-基于SSH框架

    SSH(Struts2 + Spring + Hibernate)是一种经典的Java Web开发框架组合,广泛应用于企业级应用系统开发,尤其是人力资源管理系统等业务复杂的项目。这个项目是基于SSH框架实现的人力资源管理系统的源码,它展示了...

    当当网项目

    这个项目可能涵盖了从需求分析到设计、编码和测试的全过程,帮助学习者理解如何在实际环境中应用Struts2框架。Struts2是一个强大的MVC(Model-View-Controller)框架,它简化了Java Web应用程序的开发,提供了丰富的...

    Framework学习文档

    3. Struts2的执行流程:后台接收到request,经过Struts2的前置控制器StrutsPrepareAndExecuteFilter解析请求路径,去Struts2的配置文件中找对应的namespace和action的name属性,然后再找到对应的class和method,执行...

    07-01-Struts标签.pdf

    Struts2是一个开源的Web应用程序框架,用于创建Java EE应用程序。它是一个MVC(Model-View-Controller)设计模式框架,最初基于Apache Struts,然后整合了WebWork的核心功能,进而发展成为一个更加灵活且功能强大的...

    struts标签和ognl语法

    Struts 是一个开源的 MVC...综上所述,Struts 标签和 OGNL 提供了一种高效的方式来处理 JSP 页面中的数据展示和控制流。结合 jQuery 和 AJAX,可以构建出功能丰富的动态 Web 应用程序,实现实时的数据验证和用户交互。

Global site tag (gtag.js) - Google Analytics