`
ttcoool
  • 浏览: 8590 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

struts学习(二)

阅读更多

    struts学习进阶,第一部分讲到ActionForm和Action连用的情况,有些时候不需要使用ActionForm,这样更简洁方便。下面先来学习ForwardAction。

    在struts中有个习惯,a.jsp要跳到b.jsp最好中间经过c.do。下面就来实现这个简单的跳转。要实现这个跳转其实只需要配置struts-config.xml文件

 <action-mappings >
  	<action path="/hello" type="org.apache.struts.actions.ForwardAction" parameter=
  	"/hello.jsp"></action>
  </action-mappings>

    path是要引用的地址,如本例在hello.html中使用一个超链接

<a href="hello.do">点这里</a>

    parameter是链接到的地址。这个例子比较简单。接着学习下分发,DispatchAction。

    为什么需要DispatchAction呢,为了减少Action的数量,这种Action会根据status的具体数值选择不同的执行方法,下面看一个具体例子。

    new action,form。action继承自DispatchAction。

    在表单上要添加一个hidden域

<html:form action="demo.do" method="">
	姓名:<html:text property="name"></html:text>
	<input type="hidden" name="status" value="update"/>
	<html:submit value="提交"></html:submit>
	</html:form>

   struts-config.xml

 <action
      attribute="demoForm"
      input="/form/demo.jsp"
      name="demoForm"
      path="/demo"
      scope="request"
      type="com.tanger.struts.action.DemoAction" parameter="status">  
</action>

    注意要在其中增加一个parameter属性,属性值设置的和hidden的name一致。再看action

public ActionForward insert(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		DemoForm demoForm = (DemoForm) form;// TODO Auto-generated method stub
		System.out.println("**insert name**--->"+demoForm.getName());
		
		return null;
	}
	public ActionForward update(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		DemoForm demoForm = (DemoForm) form;// TODO Auto-generated method stub
		System.out.println("**update name**--->"+demoForm.getName());
		
		return null;
	}

   默认的方法名是execute,现在改成hidden域的值,这样可以调整hidden的value,执行的将是不同的方法。例如本例的status值为update,执行后的结果

   

**update name**--->test

   即执行了update方法。

   现在出现一个问题,就是ActionFrom过多的问题,每一个Action都对应一个ActionForm实在是太麻烦了,所以有了DynaValidatorForm。下面我们就将上面的例子改成动态的形式。

   首先增加form-bean

<form-bean type="org.apache.struts.action.DynaActionForm" name="dynaForm">
		<form-property name="name" type="java.lang.String"/>
</form-bean>

   由于表单上只有一个属性,所以这里只写一个,如果表单有多个这里就要写多个。接着修改以前的action

   

public ActionForward update(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		//DemoForm demoForm = (DemoForm) form;// TODO Auto-generated method stub
		DynaActionForm dynaForm=(DynaActionForm)(form);
		System.out.println("**update name**--->"+dynaForm.getString("name"));
		
		return null;
	}

    改变以后获取属性的房还是不再是getName()而变成了getString(“name”)

    最后能和demoForm达到相同的效果。但是又有一个问题产生了,如果不使用ActionForm那么如何进行验证操作呢?

   struts提供了一个验证框架(validator-rules.xml),配置比较复杂,我们来做一个例子。

第一步:添加一个叫做validation.xml的验证规则(本例加入了required规则)

<?xml version="1.0"?>
<!DOCTYPE form-validation PUBLIC
          "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"
          "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">
<form-validation>
<formset>
<form name="validateForm">
<field depends="required" property="name">
	<arg resource="true" key="error.name"></arg>
</field>
</form>
</formset>
</form-validation>

    其中error.name是作为参数传递到errors.required={0} is required.中的{0}。

第二步:所有错误信息要在资源文件中编写(error.name,error.required)

error.name=user name
errors.required=<li>{0} is required.

第三步:配置struts-config.xml,在相应action中增加一个熟悉:validate="true"

 <action
      attribute="validateForm"
      input="/dispatch.jsp"
      name="validateForm"
      path="/validate"
      scope="request"
      type="com.tanger.struts.action.ValidateAction" validate="true" parameter="status">
</action>

第四步:由于验证框架是struts的一个组件,所以要配置此组件。添加一个插件pluge   new-->struts 1.2 pluge

<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
    <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />
  </plug-in>

 这样就完成了整体配置,在jsp页面调用validate.do即可。<html:errors/>打印错误信息。

使用了验证框架以后,可以直接通过js进行错误的提示

去掉<html:errors/> 添加<html:javascript formName="validateForm"/> 会自动生成js函数

<!-- Begin 

    var bCancel = false; 

    function validateValidateForm(form) { 
        if (bCancel) { 
            return true; 
        } else { 
            var formValidationResult; 
            formValidationResult = validateRequired(form); 
            return (formValidationResult == 1); 
        } 
    } 

    function validateForm_required () { 
     this.a0 = new Array("name", "<li>user name is required.", new Function ("varName", " return this[varName];"));
    } 

    代码非常长,只截取关键部分。

   我们在表单上调用该函数即可

<html:form action="validate.do" method="post" onsubmit="return validateValidateForm(this)">
	姓名:<html:text property="name"></html:text>
<input type="hidden" name="status" value="update"/>
<html:submit value="提交"></html:submit>
</html:form>

    这样就完成了js的调用,当name为空会弹出窗口提示。

    附件是本例子的代码

 

 

 

 

分享到:
评论

相关推荐

    struts2学习资料下二

    struts2学习资料下二 struts2学习资料下二 struts2学习资料下二 struts2学习资料下二

    struts2学习笔记二

    struts2学习笔记二

    Struts框架的学习

    3、 在将信息传递到副控制器前ActionFrom 对请求参数做了第二次封装处理 4、 主控制做出判断通过Struts-confing.xml配置文件去问符合要求访问的副控制器 5、 在调用Biz 时 Entity实体对象将请求参数做了第三次封装...

    struts2帮助文档

    struts2的概述struts2下的HelloWord struts2基础 struts2做好准备 ...struts2进阶学习二 struts2进阶学习三 struts2进阶学习四 struts2进阶学习一 struts2进阶学习一 struts2进阶学习一 struts2进阶学习一

    Struts2学习之二--Struts2标签介绍

    Struts2学习之二--Struts2标签介绍

    struts学习笔记

    建立一个Java Web项目,提取最少运行Struts2应用的包集合,目标:实现一个简单的用户登录 包括内容: 一、先实现登录页面 二、实现处理页面的Action 三、配置Web.xml 四、配置Action处理结果和资源资源之间的映射关系 ...

    Struts2学习(二)

    NULL 博文链接:https://xiaoshang-2008-126-com.iteye.com/blog/1846223

    Struts2权威指南完整版

    改为使用Convention插件提供“零配置”,Struts 2.1新增了Portlet支持……为了让众多Struts学习者、工作者快速从Struts 2.0的开发升级到Struts 2.1,笔者升级了《Struts 2权威指南》,第二版改写了第一版中所有程序...

    struts的jar+二级缓存的jar

    struts框架需要导入的jar包!学习用品

    Struts2 学习笔记

    二、 搭建Struts2的运行环境: 5 三、 Namespace 6 四、 标签 6 五、 Action 6 六、 路径问题的说明 8 七、 Action的动态调用方法 8 八、 Action通配符(wildcard)的配置 9 九、 Action的属性接收参数 10 1、 在...

    Struts2教程

    Struts2 虽然在大版本号上是第二个版本,但基本上在配置和使用上已经完全颠覆了 Struts1.x 的方式(当然, Struts2 仍然是基于 MVC 模式的,也是动作驱动的,可能这是唯一 没变的东西)。 Struts2 实际上是在 ...

    struts2框架搭建

    2、第二、三种方式主要增加的是动态调用(第三种方式推荐使用),struts.xml放在src下 3、第四种方式struts.xml放在src下某一目录的子目录下面,方便管理(推荐使用,可仔细学习,如果是放在WEB-INF下面,亦可参考此...

    struts自我学习过程程序以及说明

    本资源包括struts的学习程序,能够完全运行,当然,我是完全调试运行出来的,都是源代码原封上传,还有说明文档。还有自我总结资料,放到下一个文件夹当中上传,这里压缩只有这么多了,希望能去下载,那个全部是文档...

    Struts2 in action中文版

    1.1 Web应用程序:快速学习 2 1.1.1 构建Web应用程序 2 1.1.2 基础技术简介 3 1.1.3 深入研究 6 1.2 Web应用程序框架 7 1.2.1 什么是框架 7 1.2.2 为什么使用框架 8 1.3 Struts 2框架 9 1.3.1 Struts 2简史 9 1.3.2 ...

    struts2源码

    作为Java Web开发者,成天和SSH打交道,只知其一而不知其二,水平始终停留在初级水平,这就不要抱怨工资低,要更多的收获就需要背后更多的付出,跟读框架源码是进阶的一个很好的途径。跟读struts2源码的时候注意两条...

    struts项目搭建

    二、第一个Struts 2.0应用程序——Hello World 下面我们进行臭名昭著的Hello World程序。几乎所有语言的第一个程序都是Hello World。在src目录上右键,新建一个类,参数如下: 类的内容如下: package ...

    Struts 2.1 权威指南 part13 pdf

    改为使用Convention插件提供“零配置”,Struts 2.1新增了Portlet支持……为了让众多Struts学习者、工作者快速从Struts 2.0的开发升级到Struts 2.1,笔者升级了《Struts 2权威指南》,第二版改写了第一版中所有程序...

Global site tag (gtag.js) - Google Analytics