`
arne3166
  • 浏览: 133791 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Struts2 ——4、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>

 

页面视图

访问路径
http://localhost:8080/struts0100/loginput.action

 

 

 结果页面

<!--成功页面 success.jsp-->
<body>
Welcome arne3166!
</body>

<!--失败页面 fail.jsp-->
<body>
You are not the right user!
</body>

 效果:当在页面输入arne3166作为用户名并且密码是111111时

否则



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

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

看看我们是怎么做的

首先定义User

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被简化成了什么样子

 

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

<!--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>

 再看看配置文件

 

<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是怎么写的:

 

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的配置文件

 

<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>

 

再看表单的页面

 

<!--又回到原始简单的样式了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出来的话,会在页面给你一个异常吃吃

 

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)
    

  下面附上我的代码。

  • 大小: 4.2 KB
  • 大小: 2 KB
  • 大小: 2.3 KB
1
0
分享到:
评论

相关推荐

    Xwork——Struts2核心

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

    Java第一课

    - Java中的整数类型包括byte、short、int和long,它们分别占用1、2、4、8个字节,具有不同的取值范围。例如,int类型范围为-2147483648至2147483647。 - 字符类型char在Java中占用2个字节,用于存储单个Unicode...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    1.2.4 Android移动Web项目开发的三种解决方案:Native, Web和Hybrid优缺陷分析 4 1.2.5国内外应用现状 6 1.2.6 研究现状总结 7 1.3研究目标与内容 7 1.3.1多窗口浏览器模式的实现机制 7 1.3.2跨域交互即缓存处理方法...

    新化县建材家居协会电子商务频道共建专项方案.doc

    新化县建材家居协会电子商务频道共建专项方案.doc

    电动车控制器79HF9211:三相无刷电机矢量控制与智能驱动程序详解

    内容概要:本文详细介绍了79HF9211电动车控制器的程序架构及其关键实现细节。首先探讨了三相无刷电机的矢量控制,包括PWM频率设置、死区时间配置以及相电流采样的自校准。接着讨论了电机启动时采用的缓升策略,特别是线性斜坡函数的应用、初始力矩限制和霍尔传感器消抖处理。然后阐述了过流保护机制,强调了q轴电流监测和故障处理方法。最后提到了通信层的一些特殊功能,如CAN协议中的调试指令和安全冗余设计的重要性。 适合人群:从事电动车控制系统开发的技术人员,尤其是对三相无刷电机矢量控制感兴趣的工程师。 使用场景及目标:帮助开发者深入了解79HF9211控制器的工作原理和技术细节,掌握其编程技巧并应用于实际项目中,确保系统的高效性和稳定性。 其他说明:文中提供了多个代码片段作为实例,便于读者理解和实践。同时提醒使用者注意某些高级功能(如解除温度保护)可能带来的风险。

    PMSM FOC+SVPWM仿真模型与DSP28335代码实现及10kw永磁电机实验验证 · SVPWM 宝典

    内容概要:本文介绍了针对10千瓦永磁同步电机(PMSM)的FOC(磁场定向控制)+SVPWM(空间矢量脉宽调制)仿真模型及其在DSP28335芯片上的代码实现。首先阐述了实验背景与目的,旨在通过仿真模型深入了解PMSM的动态特性和有效控制策略。接着详细描述了基于MATLAB/Simulink平台构建的仿真模型,涵盖电机数学模型、控制算法及信号处理流程,重点在于矢量控制策略如电流环、速度环和磁场控制。随后展示了仿真的验证结果,表明模型能精确模拟电机运行状态并提升功率因数和效率。最后,文中详述了DSP28335代码实现部分,确保了电机控制算法的核心逻辑得以正确执行。实验验证显示,所提出的控制策略使电机运行稳定,响应迅速,满足预期性能指标。 适合人群:从事电机控制系统研究的技术人员、高校相关专业师生、对电机控制感兴趣的工程技术人员。 使用场景及目标:适用于需要理解和掌握PMSM FOC+SVPWM控制方法的研究人员和技术开发者,帮助他们更好地设计和优化电机控制系统,提高电机运行效率和控制精度。 其他说明:文章还提到未来将在此基础上进一步探索更多应用场景,优化现有模型与代码,以适应更广泛的实际需求。

    西门子PLC动态密码程序解析:适用于1200与1500PLC的SCL编写催款程序及动态密保

    内容概要:本文详细介绍了西门子PLC动态密码程序的设计与实现,特别针对1200PLC和1500PLC型号。该程序主要用于催款业务场景,采用了SCL(结构化控制语言)进行编写,提供了动态密保功能,增强了系统安全性和用户账户的保密性。文章从程序的编写思路、操作步骤到实际应用场景进行了全面解析,强调了其在提升工作效率、减少人为错误以及保障企业信息安全方面的优势。文中还提到,该程序具有高度的通用性和灵活性,适用于不同的业务需求,并配有详细的视频讲解,帮助用户更好地理解和操作。 适合人群:从事工业自动化控制领域的工程师和技术人员,尤其是熟悉或希望深入了解西门子PLC编程的人士。 使用场景及目标:①需要在工业控制系统中实施催款程序的企业;②希望通过增强动态密保功能提升系统安全性的企业;③希望掌握SCL编程技巧并应用于实际项目中的技术人员。 其他说明:该程序不仅提升了系统的安全性和可靠性,还在效率和准确性方面表现出色,为企业带来了更多商业机会和发展空间。

    数据库仓库管理系统课程设计.doc

    数据库仓库管理系统课程设计.doc

    数据库实验3.doc

    数据库实验3.doc

    基于映射关系的领域词典抽取算法.zip

    基于映射关系的领域词典抽取算法.zip

    工业自动化领域中基于西门子PLC与ABB机器人的立库码垛系统实现及应用

    内容概要:本文介绍了一个典型的工业自动化应用场景——立库码垛机,重点讲述了如何利用西门子PLC、ABB机器人、视觉系统(基恩士相机)、伺服轴和西门子变频器G120 Profinet等设备进行高效协同作业。文中详细描述了系统架构、设备选型、通信协议(MODBUS TCP)及其编程方法(SCL和梯形图混编),并展示了具体的程序实现与调试步骤。此外,还探讨了系统测试与优化过程,确保立库码垛机在不同工况下的稳定性和高性能表现。 适合人群:从事工业自动化领域的工程师和技术人员,特别是对PLC编程、机器人控制和视觉系统感兴趣的读者。 使用场景及目标:适用于需要提升物流与仓储中心自动化水平的企业和个人。目标是通过引入先进的自动化技术和设备,提高生产效率和精度,降低人工成本。 其他说明:本文不仅提供了详细的理论讲解,还包括丰富的实际操作经验分享,有助于读者更好地理解和掌握相关技术。

    基于JavaWeb的学生信息管理系统课程设计源码+数据库+文档报告(99分项目)

    基于JavaWeb的学生信息管理系统课程设计源码+数据库+文档报告(99分项目),个人经导师指导并认可通过的高分设计项目,评审分98分,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!主要针对计算机相关专业的正在做大作业、毕业设计的学生和需要项目实战练习的学习者,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 基于JavaWeb的学生信息管理系统课程设计源码+数据库+文档报告(99分项目)基于JavaWeb的学生信息管理系统课程设计源码+数据库+文档报告(99分项目)基于JavaWeb的学生信息管理系统课程设计源码+数据库+文档报告(99分项目)基于JavaWeb的学生信息管理系统课程设计源码+数据库+文档报告(99分项目)基于JavaWeb的学生信息管理系统课程设计源码+数据库+文档报告(99分项目)基于JavaWeb的学生信息管理系统课程设计源码+数据库+文档报告(99分项目)基于JavaWeb的学生信息管理系统课程设计源码+数据库+文档报告(99分项目)基于JavaWeb的学生信息管理系统课程设计源码+数据库+文档报告(99分项目)基于JavaWeb的学生信息管理系统课程设计源码+数据库+文档报告(99分项目)基于JavaWeb的学生信息管理系统课程设计源码+数据库+文档报告(99分项目)基于JavaWeb的学生信息管理系统课程设计源码+数据库+文档报告(99分项目)基于JavaWeb的学生信息管理系统课程设计源码+数据库+文档报告(99分项目)基于JavaWeb的学生信息管理系统课程设计源码+数据库+文档报告(99分项目)基于JavaWeb的学生信息管理系统课程设计源码+数据库+文档报告(99分项目)基于JavaWeb的学生信息管理系统课程设计源码+数据库+文档报告(99分项目)基

    同一套代码适配多种数据库最终方案代码示例

    同一套代码适配多种数据库最终方案代码示例

    新能源光伏综合自动化设备技术规范书.doc

    新能源光伏综合自动化设备技术规范书.doc

    文泰雕刻软件使用说明书上半部分.doc

    文泰雕刻软件使用说明书上半部分.doc

    三菱FX-5U PLC轴定位与Modbus RTU RS-485通信案例解析及应用

    内容概要:本文介绍了三菱FX-5U PLC在自动化生产线中的轴定位控制及其与测微计通过Modbus RTU RS-485通信的具体实现方法。文中详细描述了编程软件、PLC与触摸屏程序、地址规划表以及相关手册和视频教程的应用。通过实例展示了如何解决编程实践中遇到的各种挑战,如硬件接线和软件逻辑错误等问题。最终,成功实现了高精度的轴定位和稳定的数据通信。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对三菱FX系列PLC和Modbus RTU通信感兴趣的读者。 使用场景及目标:适用于希望深入了解三菱FX-5U PLC轴定位技术和Modbus RTU RS-485通信机制的专业人士。目标是掌握这两种关键技术的实际应用技巧,提高自动化系统的性能和可靠性。 其他说明:附带的编程示例有助于读者理解和实践文中提到的技术细节。同时提供的视频教程可以作为辅助学习材料,帮助初学者更快上手。

    电动两轮车领域的高性能FOC电机控制方案:基于国产芯片的成熟解决方案

    内容概要:本文介绍了应用于电动两轮车(如电动自行车、滑板车)的大厂成熟FOC电机控制方案。该方案基于国产Gd32F150芯片,提供了多种功能,包括转把三速切换、刹车功能、助力功能、电子刹车、欠压检测、巡航功能、铁塔王通讯、一键通、隐形限速、防盗功能、霍尔修复、自学习和故障显示等。此外,该方案配备上位机进行直观调试和波形显示,确保电机控制的稳定性和准确性。代码和PCB文件已更新并优化,适用于量产。 适合人群:电动两轮车制造商、硬件工程师、嵌入式系统开发者以及对电动出行设备感兴趣的爱好者。 使用场景及目标:① 提供稳定的电机控制方案,确保电动两轮车的安全性和可靠性;② 利用上位机进行高效调试,优化电机性能;③ 实现多种智能化功能,提升用户体验。 其他说明:该方案不仅适用于电动自行车和滑板车,还可以扩展到其他电动出行设备。其强大的功能和良好的兼容性使其成为电动出行设备开发的理想选择。

    基于COMSOL的原油脱水电-磁场耦合模型:双液滴聚结行为与影响因素分析 文档

    内容概要:本文介绍了利用COMSOL Multiphysics建立的原油脱水模型,重点探讨了在外加交流电场条件下,原油乳化液中双液滴的聚结行为及其影响因素。模型通过耦合静电场、层流场和电流守恒场,精确模拟了电场强度、界面张力和液滴直径等因素对聚结速率的影响。研究表明,适当的电场强度(如3 MV/m)可以显著提高聚结效率,而过高或过低的电场强度则可能导致相反效果。此外,界面张力和液滴直径也在聚结过程中起到关键作用,特别是当界面张力低于0.01 N/m时,液滴会迅速合并。仿真结果显示,最佳聚结速度并不出现在最高电场强度处,而是存在一个最优值。 适用人群:从事石油工程、化学工程及相关领域的研究人员和技术人员。 使用场景及目标:适用于需要解决原油脱水问题的炼油厂和其他相关企业。目标是通过优化电场条件和物理参数,提升原油脱水效率,降低生产成本。 其他说明:文中提供了具体的MATLAB代码片段用于创建和调整模型,以及详细的参数设置方法,为实际应用提供了指导。同时,强调了电场和流场耦合的重要性,提出了传统方法之外的新思路。

    教育类网站建设方案介绍.doc

    教育类网站建设方案介绍.doc

Global site tag (gtag.js) - Google Analytics