使用Struts之ActionForm

struts静态动态ActionForm使用(二)—验证 目录 登录例子 区别 时间属性 验证机制         这篇博客主要介绍使用struts框架常用的验证方式。     第一种:重写ActionForm的validate方法。        在actionForm中需要验证的都是表单的验证而非业务的验证。比如用户名非空,密码为数字,日期为时间格式等等。在validate方法中,返回ActionErrors信息 阅读详情

使用Struts之鸟瞰

ActionForm是窗体的对象化表示,它本身其实是个JavaBean,除了标准的getter与setter等方法之外,还提供有reset()、validate()等方法供Struts组件呼叫。

当透过发送请求来到ActionServlet后,ActionServlet会从ActionMapping对象中得知所使用的ActionForm对象,这是在struts-config.xml中设定的,如果所需的ActionForm还不存在就生成一个,之后一直使用它,ActionMapping与ActionForm对象会被当作参数传递给Action对象。

在Struts 1.1中,ActionForm生成之后,会执行RequestProcessor的processPopulate()方法,首先它会呼叫 ActionForm的reset()方法,您可以在当中作一些重清ActionForm属性的动作,然而窗体的参数值会与ActionForm的 setter进行比对,如果有名称符合的就将窗体的参数值设定给对应的属性。

我们透过继承ActionForm类别来使用它,下面是一个简单的例子:
package onlyfun.caterpillar;
                                                                               
import javax.servlet.http.*;
import org.apache.struts.action.*;
                                                                               
public class UserForm extends ActionForm {
    protected String name;
    protected String password;
                                                                               
    public void setName(String name) {
        this.name = name;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getName() {
        return name;
    }
    public String getPassword() {
        return password;
    }
                                                                                
    public void reset(ActionMapping mapping, HttpServletRequest req) {
        name = null;
        password = null;
    }
}


ActionForm类别编译后必须放置于WEB-INF中,并包括套件阶层,我们必须在struts-config.xlm中定义Action对象使用哪一个ActionForm对象:
<struts-config>
    <form-beans>
        <form-bean
            name="userForm"
            type="onlyfun.caterpillar.UserForm"/>
    </form-beans>
                                                                                
    <global-forwards>
        <forward
            name="welcome"
            path="/Welcome.do"/>
    </global-forwards>
                                                                               
    <action-mappings>
        <action
            path="/Welcome"
            type="org.apache.struts.actions.ForwardAction"
            parameter="/pages/Welcome.jsp"/>
                                                                               
        <action
            path="/LoginAction"
            type="onlyfun.caterpillar.LoginAction"
            name="userForm">
            <forward
                name="greeting"
                path="/pages/greeting.jsp"/>
        </action>
    </action-mappings>
 
    <message-resources parameter="resources.application"/>
</struts-config>


在这个例子中,<form-bean>标签定义了所使用的ActionForm对象及 名称,而在<action>标签的设定中,LoginAction指定了userForm作为其所使用的ActionForm,我们的 LoginAction类别如下:
package onlyfun.caterpillar;
                                                                               
import javax.servlet.http.*;
import org.apache.struts.action.*;
                                                                               
public class LoginAction extends Action {
    public ActionForward execute(ActionMapping mapping,
                                 ActionForm form,
                                 HttpServletRequest request,
                                 HttpServletResponse response)
    throws Exception {
        String name = ((UserForm) form).getName();
        String password = ((UserForm) form).getPassword();
                                                                               
        if(name.equals("caterpillar") && password.equals("1234")) {
            request.setAttribute("valid_user", form);
            return mapping.findForward("greeting");
        }
                                                                               
        return mapping.findForward("welcome");
    }
}


ActionForm被作为参数传递至execute()方法,我们必须转换为其原来的形态 UserForm,这样才可以取出当中的属性值,在验证使用者的名称与密码无误后,我们查找greeting的ActionForward对象并传回,这 会使得ActionServlet将请求forward至greeting.jsp:
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>
<%@page contentType="text/html; charset=Big5"%>
<html:html locale="true">
<head>
<title><bean:message key="welcome.title"/></title>
<html:base/>
</head>
<body bgcolor="white">
                                                                                
<logic:present scope="request" name="valid_user">
    <bean:write name="valid_user" property="name"/>您好,这是您的神秘礼物!
</logic:present>
                                                                               
<logic:notPresent scope="request" name="valid_user">
    <html:link forward="welcome">请先登入</html:link>
</logic:notPresent>
                                                                                
</body>
</html:html>


<login:present>标签会查看指定的范围中是不是有指定名称的 JavaBean对象,如果有的话就使用<bean:write>写出指定的属性,而<login:notPresent>的作 用恰恰相反,如果没有指定名称的JavaBean对象,就给出一个超级链接要求先进行登入,<html:link>的forward属性会查 找struts-config.xml中的<global-forward>的welcome设定。

如果验证失败,则查找welcome的ActionForward对象并传回,也就是Welcome.jsp,我们用之为登入窗体:
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@page contentType="text/html; charset=Big5"%>
<html:html locale="true">
<head>
<title><bean:message key="welcome.title"/></title>
<html:base/>
</head>
<body bgcolor="white">
                                                                               
<html:form action="/LoginAction" focus="name">
    名称:<html:text property="name" size="20"/><br>
    密码:<html:password property="password" size="20"/><br>
    <html:submit/> <html:reset/>
</html:form>
                                                                               
</body>
</html:html>


<html:form>指定的LoginAction必须在struts-config.xml 中有定义,<html:text>与<html:password>会取出对应的ActionForm对象中对应的属性值,如果 使用者填写的内容不正确而被送回Welcome.jsp,使用者将可以看到先前所填写的值,如果不想显示先前所填写的值,则将<html: text>与<html:password>的redisplay属性设定为false即可,这几个Struts卷标必须与Action对象及ActionForm对象搭配使用。

接下来您可以测试一下程序,连上http://localhost:8080/HelloStruts/,如果您填写了正确的窗体字段并送出,则结果会如下:
<html lang="zh">
<head>
<title>哈啰!Struts!</title>
<base href="http://localhost:8080/HelloStruts/pages/greeting.jsp">
</head>
<body bgcolor="white">
    caterpillar您好,这是您的神秘礼物!
</body>
</html>


ActionForm在Struts中是属于视图组件的一部份,它是窗体的对象化窗体,窗体的参数会自动设定给 ActionForm,无法对应的就加以忽略,您可以定义validate()方法来验证窗体设定的内容,这在下一个主题中将加以说明,在 ActionForm中您可以填入窗体值,作一些适当的值转换,进行基本的数据验证,ActionForm是窗体数据发送至应用程序前的缓冲区,在某些程 度上,它是应用程序的防火墙,您可以在ActionForm中避免不正确或不安全的数据进入应用程序。

综合一下,ActionForm担任以下的几个职责:
*窗体字段的耕耘者
*数据的缓冲区
*数据的验证
*进行属性值的转换
*应用程序防火墙
==================================================================================
The End
<script type="text/javascript" src="http://www.google.com/reader/ui/publis<script type="text/javascript" src="http://www.google.com/reader/public/javascript/user/00697638153916680411/state/com.google/broadcast?n=5&callback=grc_p(%7bc%3a%22green%22%2ct%3a%22%5cu8fd9%5cu4e9b%5cu6587%5cu7ae0%5cu4e5f%5cu503c%5cu5f97%5cu4e00%5cu770b%22%2cs%3a%22false%22%7d)%3bnew%20grc"></script>se%22%7D)%3Bnew%20GRC">
[摘]Struts 学习笔记之ActionForm 比上面的完整 博文链接:https://shangdiyefankun.iteye.com/blog/122443 立即下载

相关推荐

Struts1框架执行原理(附Action、ActionServlet、ActionForm工作机制)

有助于加强我们对Struts1的理解和学习,让我们从原理把握Struts1之后可以更方便更容易的学习Struts2

Struts功能详解——ActionForm

一:什么是ActionForm ActionForm可以从下面四点理解它 1 . ActionForm表示Http窗体的数据,也就是咱们页面表单数据收集器,可以看作是模型和视图的中介,他负责保存表单中的数据供模型或者视图使用,只能通过ActionForm验证的数据才能发送到Action处理。 2 . ActionForm是一个或者多个ActionConfig关联的JavaBean,在相应的Acti...

web开发自学 300

Dify 进阶指南 | 5步打造智能JSON转换器(Excel数据预处理神器)

本文详细介绍了如何利用Dify平台的Chatflow功能,通过5个步骤构建一个智能JSON转换器,专门用于Excel数据预处理。该工具能够根据用户指令自动解析Excel表格,执行数据清洗、聚合计算,并精准输出定制化的JSON格式,极大提升前端开发、数据分析与测试工作的效率。

weixin_28520495的博客 577

【Struts】——ActionForm

静态ActionForm方式,使用get/set方法,而动态ActionForm方式,使用map的getkey方式,其中key就是标签name的值。 使用动态ActionForm优点:若更改表单和ActionForm时不需要重新编译,而静态的需要更改静态的ActionForm.Java文件,必须重新编译。缺点:静态返回的是对应的值,动态ActionForm返回的是对象,我们还要把这个对象进行强制转换。

相由心生-心随相改~ 994

Voxel Hashing技术解析:如何解决TSDF内存爆炸问题?

本文深入解析Voxel Hashing技术如何有效解决TSDF内存爆炸问题。通过动态内存分配和空间哈希函数设计,该技术将内存占用降低96.6%,同时保持高精度重建。文章详细介绍了GPU加速实现、现代系统演进及实践指南,为实时3D重建提供工程解决方案。

m2n3b4v5c6的博客 715

【Linux】实际项目应该如何完成?--安防监控系统项目的总结

到目前为止我也做个5、6个嵌入式项目,但以往都是从零开始自己做,也就是毫无计划,想到那里做那里,有想法就会去实现,就这样导致我碰到了很多坑,也消耗了我许多时间,当然,不是说这样不好,因为在其中我也得到了一个很好的锻炼与练习,但是这不适用于在工作中去这样做。...

修成真的博客 6731

struts第六篇:struts核心类ActionForm

静态和动态actionform          actionform是struts框架的核心类之一,其类似于一个实体类,收集并保存表单的上每个数据。它是struts解析了struts-config.xml文件创建出actionmapping类之后,根据actionmapping类中的name属性创建的。          actionform一般为静态类,如果为静态类,那么使用方法和面向对象

zsk 2224

FPGA实现电机转速PID控制

通过纯RTL实现电机转速PID控制,包括电机编码器值读取,电机速度、正反转控制,PID算法,卡尔曼滤波,最终实现对电机速度进行控制,使其能够渐近设定的编码器目标值。

STATEABC的博客 7541

Struts应用之ActionForm

Struts框架中的视图组件主要包括:    ·JSP页面    ·ActionForm类    ·Struts自定义标记    ·消息资源       其中,ActionForm类是Struts框架的核心组件之一,是Struts的关键视图组件。1.ActionForm的作用机理      ActionForm本质上是一种JavaBean,是专门用来传递数据的DTO(Data Transfer

danLOVE520的专栏 764

基于卷积神经网络的人脸表情识别(JAFFE篇)

1.win10/11操作系统2.python3.7以上3.tensorflow2.4以上版本(2.0其它版本需要微调)4.内存12G,显卡4G以上(没有独显倒是也能跑...)(这个可爱的妹子就是JAFFE数据集中的图片)

小林同学的计算机学习 5914

扩增子分析|溯源分析在R中的复现:跟着Nature系列文章利用FEAST溯源分析包追溯微生物群落的起源

溯源分析由Liat Shenhav等人在2019年发表在Nature Methods杂志,他们开创的一种分析微生物群落组成结构的方法,通过量化不同微生物样本(来源)在目标微生物群落(汇)中的比例或分数识别微生物群落的潜在来源。该方法自发表以来受到微生物学界广泛关注,该论文截止2024年10月9日已经被引289次,是领域内高被引论文,该方法已经成为Nature,cell系列文章高度关注的方法。

weixin_46814750的博客 3439

struts的试验--验证struts对ActionForm的使用的机制

ActionForm是Jsp与Servlet(Action)之间传输数据的纽带,为了搞清楚ActionForm的使用情况,我做了一些试验。ActionForm -- examples.simple.SimpleActionForm我给SimpleForm的载入、构建和各getter/setter中都加入了打印信息的代码。Action -- examples.SuccessAction只实现了跳

pbMaster的专栏 2046

AD18 PCB模块的Copy

在PCB布局时,时常会将元器件先分模块进行排布,最后才会进行总体的布局,在局部布局的时候,想要移动一个模块的器件总是很麻烦,需要选中全部才能进行移动,有些时候还有选漏的情况,所以会将局部布局的模块把它看做一个整体进行移动,效果如下,元件,布线,铜皮,过孔以及元件编号的位置摆放都和源模块一模一样。4、再选中需要复用的模块内的元件,按照第3步的顺序排序,粘贴刚刚复制的Channel Offset参数。在PCB布局时,有多个模块原理图是一模一样的情况,我们可以只画一个模块,之后灵活应用模块,进行copy。

qq_53859658的博客 3239

Struts中静态动态ActionForm的使用(一)

目录 登录例子 区别 时间属性 验证机制         在Struts1中,我们经常接触ActionForm为静态ActionForm。静态是指开发者在使用struts框架时必须写对应的ActionForm。     在介绍动态ActionForm使用之前,我们回忆struts常用的ActionForm的方式,以便做对比。     举个完整的登录例子。     第一

3782

有限元ABAQUS软件安装后管理员身份运行报错:Cannot connect to license server system...如何解决?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 2077

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

struts1 ActionForm的初步简单使用

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34050389的博客 93

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Struts Gossip: 使用 ActionForm

ActionForm是表單的物件化表示,它本身設計為JavaBean,您要繼承org.apache.struts.action.ActionForm來設計一個表單物件,並提供標準的getter與setter方法,必要時可以使用繼承下來的reset()、validate()等方法供 Struts 組件呼叫。當客戶請求交給了 RequestProcessor 後,RequestProcessor會從 ...

weixin_33951761的博客 85

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【Struts】使用ActionForm一次获取表单的所有参数

觉得这边文章很有创意,拿来大家一起看看。     用过Jakarta Struts的兄弟都知道ActionForm的使用方法和她在Struts框架中所起的作用,但是您是否在为要给ActionForm编写一大堆setter和getter方法而感到厌倦和疲惫呢?的确,我是厌倦了,所以我要寻求新的方法。我第一反映就是想使用Map接口,将所有的表单参数全部放进HashMap中,然后在Action中get

901

Struts的ActionForm中不同类型属性的使用方法总结

      平时做些多表格表单显示时,actionform中经常会用到些数组或多重数组属性,map的情况,下面把我平时用到的几种总结一下: 假定actionform名为myForm.java   在sturts-config.xml中定义名也为 myForm 1.字符串或简单类型属性  myForm.java 中定义为  private String  abc;    (get ,

cool_rain_man的专栏 710

Struts 动态actionForm的使用

一直以来对actionForm很有意见,因为总感觉actionForm类是多余的.可能struts组织也意识到了这方面的不足于是有了DynaValidatorForm(动态actionForm).下面我来介绍DynaValidatorForm的使用.以用户注册的例子简单介绍首先创建用户类 (User.java)属性为 userNameuserPass第二创建动态Action

猪的java世界 1756

Struts中ActionForm的使用及传参

 ActionForm的使用及传参ActionForm是Struts中的模型层,它主要用于保存页面传来的参数,并用于判断是否为空,是否验证错误第一种传参(采用JavaBean的实体做为参数,及以类作为参数)1.login.jsp(登录界面,传参)  JSP for LoginForm form username :

枫之叶的专栏 1270
上一篇: Javascript的图片滚动浏览效果代码
下一篇: JAVA新手入门必看的30个问题
系统信息
系统信息 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄23年 2404粉丝 565原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值