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 概念与架构 **1.1 Struts2 简介** - **定义**:Struts2 是 Apache 组织提供的一个基于 MVC 架构模式的开源 Web 应用框架。 - **核心**:Struts2 的核心其实是 ...
二、Struts1.2特性 1. **Plug-in架构**:Struts1.2支持插件,允许开发者扩展框架功能,如自定义拦截器、标签库等。 2. **Tiles框架集成**:Tiles提供了一种方式来组织和重用页面布局,使得视图设计更加灵活。 3. *...
### Struts学习笔记详解 #### 一、Struts框架概览与编码设置 在学习Struts框架时,首要关注的是其编码配置。如代码片段所示,`struts.i18n.encoding`常量被设置为`UTF-8`,这确保了国际化(I18N)资源文件的正确...
在"struts2完全学习手册源码"中,我们可以深入理解Struts2的核心概念和工作原理。第一章的源码提供了关于Struts2配置文件和基本原理的实践示例。以下是对这些知识点的详细阐述: 1. **配置文件**: - **struts.xml...
### Struts2学习知识点 #### 一、Struts2简介 Struts2是Apache软件基金会的一个开源项目,它是一个基于MVC(Model-View-Controller)设计模式的Web应用程序框架,用于开发Java EE平台上的动态网站。Struts2提供了...
Struts2是一个强大的Java Web应用程序开发框架,基于Model-View-Controller(MVC)设计模式,为开发者提供了...然而,随着Spring Boot等现代框架的兴起,Struts2的使用逐渐减少,但其设计理念和技术仍值得学习和借鉴。
Struts2学习心得 本文总结了Struts2的常用方法和经验,涵盖了配置问题、EL表达式、Struts2的架构和Namespace等方面的知识点。 一、配置问题 Struts2的最新版本为GA 2.2.1,需要以下几个类库: 1.commons-...
### Struts2学习小结 #### 一、Struts2简介及环境搭建 **Struts2** 是一款基于 **MVC**(Model-View-Controller)设计模式的开源框架,用于简化 Java Web 应用程序的开发过程。通过将业务逻辑、用户界面以及控制...
### Struts2学习笔记知识点概览 #### 一、环境搭建 **1.1 Struts2简介** - **Struts2概述**:Struts2是一个开源的MVC框架,它结合了Struts 1.x、WebWork和其他一些框架的优点。Struts2的主要目标是简化Web应用程序...
struts2的概述struts2下的HelloWord struts2基础 struts2做好准备 ...struts2进阶学习二 struts2进阶学习三 struts2进阶学习四 struts2进阶学习一 struts2进阶学习一 struts2进阶学习一 struts2进阶学习一
**二、Result** Result是Action执行后的结果,它可以是JSP、HTML、XML或其他任何类型的输出。Result定义了Action执行完成后如何跳转到下一个页面或资源。在Struts2配置文件中,Result通过`<result>`标签定义,如 `...
#### 二、Struts2框架搭建与配置 ##### 2.1 导入Jar包 - **下载Struts2的Jar包**:首先需要下载Struts2的库文件,通常包含多个必需的Jar包,如`struts2-core-2.3.24.jar`等。 - **添加必要的第三方库**:注意避免...
#### 二、Struts1的基本组成 **1. 核心组件介绍** - **ActionServlet**:作为整个框架的核心控制器,负责接收客户端请求,并决定调用哪个Action来处理该请求。 - **Action**:具体实现业务逻辑的部分,通常继承自`...