`
hao861002
  • 浏览: 86504 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

struts复习第二天

阅读更多


ActionForm的校验

<struts-config>
  <form-beans>
     <form-bean name="xxx" type="ActionForm的类全名">
     <form-bean name="LoginForm" type="basic.LoginForm">
     <!--配置ActionForm类-->
  </form-beans>
  <action-mappings>
     <action path="/basic/login"  type="alan.struts.basic.LoginAction"
                 name="xxx" scope="request|sessio(默认值)Form的保存空间">
        <forward name="success" path="/basic/success.jsp"/>
        <forward name="fail" path="/basic/fail.jsp" redirect="false"(重定向,默认false)/>
      </action>
   <action-mappings>
</struts-config>

ActionForm的校验是struts提供的一项类似于Javascript的表单校验的功能。他可以验证用户填写的表单数据的正确性。

ActionForm的校验,如果表单中的数据符不符合规定格式的要求,ActionForm的validate()方法会返回一个ActionError对象,ActionError对象中封装了一个或多个应用发现的校验错误,每一个错误有一个ActionMessage对象表达,我们可以通过判断这个ActionError的对象是否为空,如果为空那么表单的数据符合格式要求,不为空就是表单项中就有不符合格式要求的项。

struts标签

在使用struts标签的JSP页面中要先加上以下的标签库的引用
<%@taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>

<bean:message key="errors.username.required">这个标签可以从指定的资源文件中根据指定的key值来取得可以对应的值,但是需要在struts-config.xml中进行配置。
配置资源,这些资源可以在ActionMessage中使用,也就是在构造ActionMessage是指定资源文件中的key这样,在发现校验错误时,就可以先在资源文件中指定的key的值了。可以使用struts的<html:errors>
<html:message>、<bean:message>标签都可以显示指定错误的消息。
<struts-config>
    .....
    <message-resources parameter="alan.struts.message.MessageResource" />
    <!--使用message标签时配置资源文件的位置-->
</struts-config>

struts会自动的判断返回ActionError是否为空,如果是空可以自动的转向指定页面,也可以强制不进行校验,虽然可以在Form中不去覆盖validate()方法,但是那样是不可取的。要实现上面提得到功能还需要在struts-config中配置。
<action   path="/basic-validate/login"  type="alan.struts.basic.LoginAction"
            name="loginValidateForm" scope="request"
            validate="true"  input="/basic-validate/login.jsp">
    <!--scope可以指定Form的存放空间,默认为sessoin-->
    <!--action标签中配置validate="false"可以不进行校验,input是指定校验出错跳转的页面-->
    <forward name="success" path="/basic-validate/success.jsp"/>
    <forward name="fail" path="/basic-validate/fail.jsp"/>
</action>

<html:message id="error"><!--id属性是ActionMessage存放在空间中的key-->
  <h1>${error}</h1>
</html:message>
<html:errors>标签只会原样输出在ActionErrors中ActionMessage对应资源文件中对应的值。
<html:messages>标签还可以对输出在ActionError中ActionMessage对应资源文件中对应的值作一些显示效果的修改。
<bean:message key="xxx.xxx">标签只会取资源文件中指定key所对应的值,使用bean:message标签可以实现国际化。


struts的html标签

struts的html标签的使用类似于html标签,但是少有区别,指定类型的方式变成使用不同的标签,这样会绑定struts,所以旨在需要时使用。
<html:form method="post" action="/basic-validate/login">
<!--
   struts的html标签中的action可以只写转到的actionpath,struts会在解析是自动添加需 要的部分 
-->
 <html:text property="userName" />
 <html:password property="password" redisplay="false"/>
        <!--redisplay="false"不进行回写,只有html:password标签可用-->
        <html:radio property="hibbos">
 <html:submit value="login" />
</html:form>

Struts预定义的Action类

注意:在使用继承Struts预定义的Action类,一定不要覆盖execute方法,否则会导致无法调用自定义Action相应方法。

DispatchAction类(org.apache.struts.actions.DispatchAction)

DispatchAction类是Action类的子类,他提供了有实现的execute方法。

我们写的自定义Action类,可以继承DispatchAction类,但不要覆盖execute方法,可以在自定义类中写反回值和参数表都与execute方法相同的方法,可以通过在struts-congfig.xml中为这个action的配置中添加一个参数,来判断调哪一个方法,实际上DispatchAction类就是通过反射机制,通过form中参数调用了自定义Action中的方法,当然这些方法的定义要符合规范,使用继承DispatchAction类的自定义的Action类,也就会共享同一的Action路径。

注意:使用继承DispatchAction类的自定义的Action,只会匹配一个action路径,只能共享一个ActionForm,如果加上校验,会产生form表单的参数不一致的情况,会导致校验无法通过。


例:
public class MyAction extends DispatchAction{
 ActionForward add(ActionForm form,HttpServletRequest request,HttpServletResponse                                         response ActionMapping mapping) throws Exception
        {
                    return mapping.findForward("sucess")                    
        }
}

<action path="/add"  type="MyAction" parameter="methodName">
    <!--parameter属性是和form中隐藏域的名字相对应的-->
    <forward name="sucess" path="/sucess.jsp"/>
</action>

<from action="add.do" method="post">
   <input type="hidden" name="methodName" value="add"/>
   <!--
      使用隐藏域为struts传递要调用自定义Action中方法的方法名,是通过与struts-config.xml
      中action标签中的parameter和name属性相对应来获取隐藏域的value。
   -->
   <input type="submit" value="submit"/>
</from>

MappingDispatchAction类(org.apache.struts.actions.MappingDispatchAction)

MappingDispatchAction类是DispatchAction的子类,他和DispatchAction不同点就是可以去匹配多个action路径,这样也就是结决了共用ActoinForm的校验问题了,多个Action的路径使用同一的自定义Action类,这样就不用共享同一个ActionForm,也就不会有校验问题了。


例:
public class MyAction extends MappingDispatchAction{
 ActionForward add(ActionForm form,HttpServletRequest request,HttpServletResponse                                         response ActionMapping mapping) throws Exception
        {
                    return mapping.findForward("add")                    
        }
        ActionForward del(ActionForm form,HttpServletRequest request,HttpServletResponse                                         response ActionMapping mapping) throws Exception
        {
                    return mapping.findForward("del")                    
        }
}

<action path="/add"  type="MyAction" parameter="add">
   <!--parameter属性是指定调用方法的名字-->
   <forward name="add" path="/add.jsp"/>
</action>       
<action path="/del"  type="MyAction" parameter="del">
   <forward name="del" path="/del.jsp"/>
</action>

在JSP页面中也不用在使用隐藏域传递参数,直接在form中的action中就可以直接使用xxx.do匹配了。
<form action="add.do" method="post">
   <input type="submit" value="submit"/>
</form>
<form action="del.do" method="post">
   <input type="submit" value="submit"/>
</form>

LookupDispatchAction(org.apache.struts.actions.LookupDispatchAction)

LookupDispatchAction类也是DispatchAction类的子类,他所实现的功能是解决一个表单多种提交问题的
,他是通过使用资源文件,用submit按钮的value来作为资源文件中的key所对应的值,通过这个值来找到对用的key,在使用这个key来获得指定Map中所对应的值,这个值就是要调用的方法名。

submit的value---->MessageResource.properties中的key----->Map中key对相应的值---->action

例:
<%@taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>

<form method="post" action="${pageContext.request.contextPath}/lookup/adddel.do">
 <input type="submit" value="<bean:message key="button.add" />" name="methodName">
        <!--注意name="methodName"是和strut-config.xml中action标签中的parameter属性-->
 <input type="submit" value="<bean:message key="button.delete" />" name="methodName">
</form>

MessageResource.properties

button.add=add new user
button.delete=delete user

注意:在继承LookupDispatchAction时,要覆盖getKeyMethodMap()方法,并定义Map,向Map中放入指定的键值对。

public class AddDelLookupDispatchAction extends LookupDispatchAction
{
 public Map getKeyMethodMap(){
  Map keyMethodMap= new HashMap();
  keyMethodMap.put("button.add", "add");
  keyMethodMap.put("button.delete", "delete");
  return keyMethodMap;
 } 
    public ActionForward add(ActionMapping mapping,ActionForm form,
                   HttpServletRequest request,HttpServletResponse response) throws Exception
    {   
        return mapping.findForward("add");
    }
    public ActionForward delete(ActionMapping mapping,ActionForm form,
                   HttpServletRequest request,HttpServletResponse response) throws Exception
    {
     return mapping.findForward("delete");
    }
}

<action   path="/lookup/adddel"  type="alan.struts.actions.AddDelLookupDispatchAction"
            parameter="methodName">
            <forward name="add" path="/add.jsp"/>
            <forward name="delete" path="/delete.jsp" />
</action>
<message-resources parameter="alan.struts.message.MessageResource" />

自定义的Action类的一些规则
1,尽量不要在Action类中使用(静态)成员变量,如果使用要加上同步。
2,尽量使各模块间的耦合性降低,最大限度的针对接口编程。
3,可以将共代码方在覆盖父类的方法中,最后可以用super.xxx(xxx)来调用父类的方法,使用父类的实现,并加上了自定义的功能。

分享到:
评论
1 楼 Marker 2009-01-15  
很不错

相关推荐

    Struts 2练习源码 第二天002

    Struts 2练习源码 第二天002Struts 2练习源码 第二天002Struts 2练习源码 第二天002Struts 2练习源码 第二天002Struts 2练习源码 第二天002Struts 2练习源码 第二天002

    struts2课件第二天

    在"struts2课件第二天"中,我们可以深入学习Struts2的核心概念和实际应用。 1. **Struts2框架基础** - Struts2是Apache软件基金会的开源项目,它是Struts1的升级版,弥补了Struts1的一些不足。 - Struts2的核心是...

    struts2的复习

    在本复习资料中,我们将深入探讨Struts2的核心概念、主要特性以及如何在实际开发中应用。 一、Struts2框架基础 1. 框架概述:Struts2是Apache软件基金会的开源项目,它是Struts1的升级版,吸收了其他框架如WebWork...

    struts2复习题

    比较全面的hibernate 、struts 、 spring 复习题答案。

    struts2课件第四天

    在"struts2课件第四天"的学习中,我们将深入探讨Struts2的核心概念、配置以及实战应用。 1. **Struts2框架介绍** Struts2是由Apache软件基金会维护的一个开源项目,它继承了Struts1的优点并弥补了其不足,提供了更...

    struts2第二天源代码

    这个"Struts2第二天源代码"可能是指一系列学习或教程资源,其中包含了Struts2框架的第二天学习内容。在这个压缩包中,很可能是包含了第二天课程相关的源代码示例,帮助学习者深入理解Struts2的工作原理和开发实践。 ...

    struts复习模拟题.pdf

    Struts2是一个基于MVC(模型-视图-控制器)设计模式的Java Web应用程序框架,它的主要目的是简化Java后端开发,提供一个可扩展且灵活的架构。在Struts2框架中,过滤器(Filter)是核心,它通过拦截器(Interceptor)...

    struts2复习资料

    在复习Struts2的知识时,有几个关键点值得深入理解和掌握。 1. **Struts2常量配置**: - `struts.devMode`:这是一个用于设定开发模式的常量,设置为`true`时,Struts2会在开发阶段提供更多的错误信息和调试帮助,...

    J2EE复习积累(二)-Struts2.3复习

    本篇复习将深入探讨Struts2的核心概念、架构、主要特性和实际应用。 一、Struts2核心概念 1. 模型(Model):业务逻辑处理部分,通常由JavaBean或EJB实现。 2. 视图(View):负责数据的展示,如HTML、JSP等。 3. ...

    struts2四天的学习笔记

    13. ** strut2四天笔记**:这份学习笔记可能涵盖了以上所有知识点,包括如何创建Action,配置struts.xml,使用OGNL表达式,处理异常,以及实践中的各种技巧和最佳实践。 在四天的学习过程中,你应该通过实践和理解...

    struts2第一天课件

    本课件旨在帮助初学者快速掌握Struts2的核心概念和技术,通过"struts2第一天课件"的学习,你将能够了解到Struts2的基本架构、配置以及实际应用。 首先,了解Struts2框架的基础。Struts2是Apache软件基金会的开源...

    struts2综合复习习题

    ### Struts2综合复习知识点详解 #### 一、Struts2标记库中迭代标签iterator的()方法是判断当前元素是否是第偶数个元素。 **答案解析:** - 正确答案为 **D.isEven**。 - Struts2中的`&lt;s:iterator&gt;`标签用于迭代...

    struts2 学习重点笔记

    #### 二、Struts2 核心组件详解 **2.1 模型(Model)** - **功能**:提供业务逻辑和数据访问方法,保存应用程序状态信息。 - **实现技术**:JavaBean 或 EJB。 **2.2 视图(View)** - **实现技术**:JSP、FreeMarker ...

    struts例子struts例子struts例子struts例子struts例子struts例子

    struts例子struts例子struts例子struts例子struts例子struts例子struts例子struts例子struts例子struts例子struts例子struts例子struts例子struts例子struts例子

    struts学习(二)

    Struts学习(二)主要涉及的是Apache Struts框架的深入理解和使用,这是一个广泛应用于Java Web开发中的MVC框架。在本篇文章中,我们将探讨Struts的核心概念、安全问题以及一些实用工具,帮助开发者更好地掌握这一...

    struts包struts包struts包

    struts包struts包struts包struts包struts包struts包struts包struts包

    开发者突击 struts2 第二章 源代码

    本章"开发者突击 Struts2 第二章 源代码"着重关注Struts2框架的核心概念和源码解析,帮助开发者深入理解其工作原理。 在Struts2框架中,源码的分析对于提升开发者的技能至关重要,因为它揭示了框架如何处理请求、...

    Struts升级到Struts2.3.35

    北京时间8月22日13时,Apache官方发布通告公布了Struts2中一个远程代码执行漏洞(cve-2018-...第二,当使用没有 value和动作集的url标签时,并且其上层动作集配置没有或只有通配符命名空间值,也可能构成 RCE 攻击。

    struts2地市、县区二级联动下拉菜单 doubleselect标签

    `doubleselect`标签是Struts2自定义标签库的一部分,它允许开发者创建两个相关的下拉列表,当用户在第一个下拉框选择一个选项时,第二个下拉框的内容会相应地更新。这种联动效果能够提高用户界面的交互性和用户体验...

Global site tag (gtag.js) - Google Analytics