`
明天会更浩
  • 浏览: 5736 次
  • 性别: Icon_minigender_1
社区版块
存档分类

Struts2表单验证、模型驱动、防重复提交、数据回显笔记整理

阅读更多

                  刚学完一些零散的struts内置功能,做点笔记,就当回顾一遍,也便以后使用。

----------------------------------------------------------------------------------------------------------------------------------------

                  1)表单验证

                    strus的表单验证通过使用struts内置的vlidation拦截器来完成。使用相对比较简单,有以下步骤需要完成。       

                        a,写一个xml配置文件(和需要验证的action必须同包),文件名字有要求必须为  actionName+methodName+validation.xml例如:InsertAction-insert-validation.xml,需要注意的是,如果不使用methodName即InsertAction-validation.xml

的格式的话,则InsertAction中所有的方法都会被验证,加上方法名则只验证指定的方法。

                         b,如何写xml文件,如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
    "-//Apache Struts//XWork Validator 1.0.3//EN"
    "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">  
<validators>
   <field name="name">
                    <field-validator type="requiredstring">
                        <message>用户名不能为空!</message> 
                    </field-validator>
                    <field-validator type="stringlength">
                        <param name="minLength">5</param>
                        <param name="maxLength">11</param>
                        <message>长度必须3-6位之间!</message>
                    </field-validator>
                </field>
              <field name="gender">
                    <field-validator type="requiredstring">
                        <message>性别不能为空!</message> 
                    </field-validator>
                </field>
                <field name="phone">
                    <field-validator type="requiredstring">
                        <message>电话不能为空!</message> 
                    </field-validator>
                </field>
                <field name="qq">
                    <field-validator type="requiredstring">
                        <message>QQ不能为空!</message> 
                    </field-validator>
                </field>
                <field name="email">
                    <field-validator type="requiredstring">
                        <message>email不能为空!</message> 
                    </field-validator>
                    <field-validator type="email">
                        <message>邮箱格式不正确!</message> 
                    </field-validator>
                </field>
                <field name="address">
                    <field-validator type="requiredstring">
                        <message>地址不能为空!</message> 
                    </field-validator>
                </field>         
</validators>   

struts内置了很多常用的验证拦截器,  <field-validator type="">type的类型可以写什么可以参照一下代码,
 <validators>
                    <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
                    <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
                    <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
                    <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
                    <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
                    <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
                    <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
                    <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
                    <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
                    <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
                    <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
                    <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
                    <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
                    <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
                    <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
                    <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
                </validators>

-------------------------------------------------------------------------------------------------------------------------------

2)模型驱动:使用模型驱动是为了简化表单中每个表单项的name属性值,我们都知道如果想要用action中定义的bean来封装表单信息,则表单中的每个表单项的name属性值必须为 action中beanName.bean对应的属性 即如果是Person person =new Person()来封装表单,则名字必须为person.name/person.gender这样比较麻烦,也可能对美工人员造成不便。使用驱动模型后则可以直接使用属性名即可.

       a,action实现ModelDriven<T>接口,传入实体对象如,ModelDriven<Person>实现一个方法:

public T getModel() ,返回一个实体对象,值得注意的是必须要new 出实体对象,在之前的封装中我们只要声明一个属性变量即可,但是现在必须要new出其实例,以便getModel() 调用。

-------------------------------------------------------------------------------------------------------------------------------------

               3)防表单重复提交,同样使用Struts内置的拦截器token来完成功能。

                     a,在Struts的默认拦截器中没有防表单重复提交功能,我们需要在action节点下注册一个,代码如下:

                        <interceptor-ref name="defaultStack" />
                        <!-- 增加令牌拦截器 -->
                         <interceptor-ref name="token">
                        <!-- 哪些方法被令牌拦截器拦截 -->
                        <param name="includeMethods">insert</param>
                        </interceptor-ref>

                    param中可以指定另一个值excludeMethods即指定除了哪些方法都执行拦截器,             includeMethods指定为哪些方法执行拦截器

                     b,配置一个错误视图,即拦截到重复提交后跳转到那个页面:

                      <!-- 当用户重复提交表单的时候,struts2会自动转到此错误页面 -->
                      <result name="invalid.token">/WEB-INF/jsp/message.jsp</result>

                       但是这里有个疑问:转到某个页面后我们如何设置提示信息给用户呢?一切验证都是struts内部完成,我们怎么知道什么时候用户重复提交了呢?希望大神指点

-------------------------------------------------------------------------------------------------------------------------------------

                     4)数据回显,很多地方都需要用到数据回显,比如编辑页面,或者是验证的时候验证失败,之前的数据回显是通过将数据存放到域中然后再每个表单项中设置value相对比较麻烦.。struts的回显则相对比较简单,但必须使用struts的控件。

                       a,在跳转到比如编辑页面或者提交页面的方法中加上如下代码:

                       //到到值栈

                       ValueStack vs = ActionContext.getContext().getValueStack();

                       //清空栈顶元素,避免不必要的回显数据
                       vs.pop();

                       //压栈,cus即用来封装数据的实体。
                       vs.push(cus);

 

                       数据回显功能比较强大,如之前比较烦躁的radio或者select等控件同样不需要特殊处理,处理方式和其他控件一致,但是必须使用struts的控件。struts的控件radio和select等控件和html控件差别很大,其他控件则大同小异。例如

                      <s:radio name="gender"  id="gender" list="#{'男':'男','女':'女'}"></s:radio>

                       使用map的形式给radio赋值,list项必须填,客户端生成 的html代码显示为map的value,值即为map的key  

                       <s:select list="#session.departlist" listKey="id" listValue="dname" name="depart" ></s:select>      

                        下拉框的值来自session域中的Bean集合,需要指定每一项显示的值listValue和每一项真正的值listKey都是Bean的属性

-------------------------------------------------------------------------------------------------------------------------------------

  学完struts后,感觉是方便了不少,但是有些困惑,java和.net相比,运行效率不才是java的优势吗?明显感觉到使用struts框架和控件后运行速度慢了不少,如果只是效率来讲的话.net那套控件使用起来更方便。。。。。。。

0
0
分享到:
评论
1 楼 明天会更浩 2014-09-11  
还不错。哦

相关推荐

    struts数据回显、模型驱动、防止表单重复提交

    本主题将深入探讨Struts框架中的数据回显、模型驱动以及如何防止表单重复提交,这些都是在实际开发中非常关键且实用的技术点。 1. 数据回显: 数据回显是指在用户提交表单后,服务器端处理数据并返回结果页面时,将...

    李顺利Struts2表单验证后回显错误信息 标签使用

    Struts2作为一款流行的Java Web框架,其在处理表单数据和验证方面有着强大的功能。在实际开发中,为了提供良好的用户体验,表单验证失败时通常需要将错误信息回显给用户。李顺利老师通过他的讲解,让我们深入理解了...

    Struts2 表单 重复提交

    "防止表单重复提交 token"是Struts2提供的一种解决方案,通过在请求中加入一个唯一的token来确保请求的唯一性和一致性。 首先,我们来看如何实现这个机制。在Struts2中,我们可以使用拦截器(Interceptor)来实现...

    struts2的日期回显

    在Struts2中,日期回显是指在表单提交后,若验证失败或者用户需要重新填写信息时,框架能够将之前用户输入的日期值重新显示在表单上,提升用户体验。这篇博客文章可能详细介绍了如何在Struts2中实现这一功能。 首先...

    js实现form表单自动回显功能

    js实现form表单自动回显功能

    struts2登陆验证

    表单的提交动作应指向Struts2的Action,如`action&gt;Login.action&lt;action&gt;`。 4. **拦截器(Interceptor)**:Struts2的拦截器可以用来增强Action执行前后的功能,比如登录验证。可以创建自定义的拦截器来检查Session...

    select2控件回显方法

    JavaScript 技术: select2控件选择多个数据,以及回显数据的方法 。

    Struts2+ajax+json异步上传图片回显

    Struts2是一个流行的Java web框架,它为开发者提供了一种模型-视图-控制器(MVC)架构,便于构建可维护、结构清晰的Web应用程序。在Struts2中,我们经常需要处理用户上传的文件,比如图片。在这个场景中,“Struts2+...

    复选框和下拉列表的提交和回显的实现方式

    #### 四、复选框的Struts2标签回显和提交 在使用Struts2框架时,可以通过Struts2提供的表单标签来简化复选框的处理过程。 ##### 4.1 学生选课例子 ```xml ``` **代码说明**: - `name` 属性用于标识复选框提交的...

    vue表单验证.zip

    Vue -- iview Form表单验证、以及数据回显 ; Select 选择器 单选验证、以及单选之后获取整个对象的数据(表单默认选择的是Value) DatePicker 日期选择器 type="datetimerange" 表单验证、以及数据回显

    留言板留言板struts2留言板struts2

    8. **表单处理**:Struts2提供了强大的表单处理能力,可以自动绑定请求参数到Action的属性,实现数据验证,并将错误信息回显到页面。 9. **异常处理**:Struts2通过全局异常映射(Global Exception Mapping)来统一...

    struts2 fielderror去掉样式

    当用户输入的数据不符合预定义的验证规则时,Struts2会将这些错误信息绑定到Action类的属性上,并在视图层展示出来,通常以红色高亮显示。 在标题"struts2 fielderror去掉样式"中,问题的核心是如何去除或者自定义...

    struts2学习笔记六(第6讲.Struts2的输入校验续一)

    当客户端验证失败时,Struts2可以自动回显错误信息到相应的表单字段,方便用户修改。同时,服务器端验证是不可或缺的一环,可以防止恶意用户的攻击。 在学习Struts2输入验证的过程中,还需要理解Action上下文...

    Struts2实现的注册

    Struts2是一个强大的Java web应用程序开发框架,它简化了基于MVC(模型-视图-控制器)设计模式的开发流程。在本项目中,“Struts2实现的注册”指的是使用Struts2框架来构建一个用户注册功能。接下来,我们将深入探讨...

    省市级三级联动js脚本,数据回显整合代码

    三级联动的基本原理是通过JavaScript或者jQuery监听用户在第一级(通常是省份)的选择变化,然后根据预设的数据(通常以JSON格式存储)动态生成第二级(城市)的选项,同样,当第二级选择变化时,再更新第三级(区县...

    基于layui的下拉列表的数据回显方法

    通过静态页面的JavaScript代码直接操作DOM元素来实现数据回显,而动态网页则结合后端传递的数据和layui的监听事件机制,实现级联下拉列表的数据回显。理解这些知识点对于提升Web前端开发的用户体验具有重要意义。

    Struts2学习笔记

    5. **强大的表单和验证**:Struts2提供了强大的表单处理和验证功能,可以轻松实现表单数据的封装、校验和回显。 6. **表达式语言(OGNL)**:Struts2使用OGNL(Object-Graph Navigation Language)作为默认的表达式...

    struts2 使用action属性接收中文参数(post提交)

    这篇名为“Struts2 使用action属性接收中文参数(post提交)”的博文可能讲述了如何在Struts2框架中正确处理中文POST请求。在处理中文参数时,主要涉及以下几个关键知识点: 1. **字符编码设置**: - 请求编码:...

    select,radio 表单回显避免使用jquery载入赋值 .txt

    select,radio 表单回显避免使用jquery载入赋值

Global site tag (gtag.js) - Google Analytics