Struts的<html:javascript>标签能够在JSP网页中生成在客户端执行的JavaScript脚本。使用方法如下:<html:javascript formName="checkoutForm"> <html:javascript>标签的formName属性指定需要验证的表单的名字。该标签能够访问为表单配置的验证规则包含的<javascript>元素,把它包含的脚本写到JSP网页中,生成validateXXX()的函数,XXX代表表单的名字。 当用户在表单上按下提交按钮后,就会调用<html:javascript>标签生成的JavaScript脚本的函数并执行。验证失败,不会提交到服务器端。
学习一下struts的验证
(说明)这里采用了最新版本struts-1.2.7,是在struts-blank的基础上演示的,为了以后的学习和参考用。
一、在对应的Form Baens中重载validate方法
在struts-config.xml文件中,action节点下有"validate"这样一个属性。在struts框架中,默认属性是validate="­true"。所以如果想通过Form
Baens的重载validate方法来验证数据的话,可以不用理会这一点。题外话:如果你在struts-config.xml文件中,设置 validate­="false"的话,validate方法将不起作用。这一点同样对Validate框架来验证数据起作用。
二、通过Validate框架来验证数据
1、首先在struts-config.xml文件中,追加如下代码:
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames"
value="/WEB-INF/validator-rules.xml,/WEB-INF/validations.xml"/>
<set-property property="stopOnFirstError" value="false"/>
</plug-in>
2、然后编写自己的Form Baens,有两种方式可供选择:
①
写的formBaen需要继承ValidatorForm,而不是第一种方法中的ActionForm
public class UserForm extends ValidatorForm {
private String userId = "";
private String password = "";
public void setUserId(String userId) {
this.userId = userId;
}
public String getUserId() {
return userId;
}
。。。。。。
然后配置struts-config文件
<form-bean name="userForm"
type="com.wxhx.presentation.UserForm"/>
② 配置struts-config文件
<form-beans>
<form-bean name=" userForm"
type="org.apache.struts.validator.DynaValidatorForm">
<form-property name=" userId" type="java.lang.String"/>
<form-property name="password"
type="java.lang.String"/>
</form-bean>
</form-beans>
3、配置validation.xml文件
<formset>
<form name="userForm"> ----这里的userForm是Form
Beans的名字
<field property="userId" depends="required">
<arg key="userForm.userId"/>
</field>
<field property="password" depends="required,mask">
<arg key="userForm.password"/>
<var>
<var-name>mask</var-name>
<var-value>^[0-9a-zA-Z]*$</var-value>
</var>
</field>
</form>
</formset>
其中key="userForm.userId"和key="userForm.password"需要在资源文件中配置
这里需要说明一点,例如:<arg key="userForm.password"
resource="false"/>
如果多了resource="false"这句话,那么它不会再从资源文件中去取,而是直接用key值来表示。
以上是通过validatorForm- or
DynaValidatorForm来实现Validate验证的
(附)
现在有这样一个问题,Form
Beans可以被多个Action应用,而每个Action可能需要的验证字段都不一样。而在validation.xml中配置的验证方式(如<form
name="userForm">)是对这个Form
Beans进行的。这样的话,如何来验证呢?
你的Form
Beans可以继承ValidatorActionForm(当然可以直接配置DynaValidatorActionForm)。如下所示:
public class UserForm extends ValidatorActionForm {
...
}
或是
<form-bean name=" userForm "
type="org.apache.struts.validator.DynaValidatorActionForm">
...
</form-bean>
struts-config文件配置如下:
<action-mappings>
<action path="/technology/createUser"
type="com.wxhx.minihr.CreateUserAction"
name="userForm"/>
<action path="/technology/editUser"
type="com.wxhx.minihr.EditUserAction"
name="userForm"/>
</action-mappings>
validation.xml文件配置如下:
<formset>
<form name="/technology/ createUser
">----这里的采用的是action的path路径
<field property="city" depends="required">
<arg0 key="prompt.city"/>
</field>
</form>
<form name="/technology/editUser ">
<field property="state" depends="required">
<arg0 key="prompt.state"/>
</field>
</form>
</formset>
关于validator-rules.xml,定义了常用的一些规则,当然也可以自己追加新的规则。
这里经常会看到msg="errors.required"字样,也是通过资源文件中配置的,默认的资源如下:
# -- validator --
errors.invalid={0} is invalid.
errors.maxlength={0} can not be greater than {1} characters.
errors.minlength={0} can not be less than {1} characters.
errors.range={0} is not in the range {1} through {2}.
errors.required={0} is required.
errors.byte={0} must be an byte.
errors.date={0} is not a date.
errors.double={0} must be an double.
errors.float={0} must be an float.
errors.integer={0} must be an integer.
errors.long={0} must be an long.
errors.short={0} must be an short.
errors.creditcard={0} is not a valid credit card number.
errors.email={0} is an invalid e-mail address.
这在struts-blank的例子中会有,在开发项目的时候,注意这些默认资源
关于自己定义规则,以后再作研究
三、结合上面的两种验证
如果即在Form
Beans中重载了validate方法,又启用了Validate框架,那会是什么效果呢?
由于要启用Validate框架,Form
Beans需要继承ValidatorForm,查看ValidatorForm的源代码,发现validate方法已经作了处理(真是为Validate框架­所服务的)。
那么在Form
Beans中重载了validate方法的话,就会覆盖原有ValidatorForm中对应的功能,所以如果想一起用的话,需要在Form
Beans的validate方法中调用errors = super.validate(mapping,
request);这句代码是启用Validate框架所要做的工作,然后可以判断errors再作下一步的处理。
当然也可以先做Form
Beans中的validate方法,然后启用Validate框架,要看具体情况而定。
四、启用客户端验证
也是结合validation.xml来验证的,我把validation.xml相关的内容在复制下来,便于看清楚:
<formset>
<form name="userForm"> ----这里的userForm是Form
Beans的名字
<field property="userId" depends="required">
<arg key="userForm.userId"/>
</field>
<field property="password" depends="required,mask">
<arg key="userForm.password"/>
<var>
<var-name>mask</var-name>
<var-value>^[0-9a-zA-Z]*$</var-value>
</var>
</field>
</form>
</formset>
①在需要客户端验证的jsp中加上这么一句<html:javascript
formName=" userForm "/>
其中formName就是validation.xml中<form
name="userForm">所对应的内容
②在<html:form中追加一个属性onsubmit="return
validateUserForm(this);"
它的语法为:return validate +
struts-config.xml中定义的form-bean名称 + (this);
③追加<scriptlanguage="Javascript1.1"
src="staticJavascript.jsp"></script>
staticJavascript.jsp的内容为:
<%@ page language="java" %>
<%-- set document type to Javascript(addresses a bug in Netscape
according to a web resource --%>
<%@ page contentType="application/x-javascript" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<html:javascript dynamicJavascript="false" staticJavascript="true"/>
这只是一种方式,还有其他简洁的(具体为啥这样,不是很明白,希望得到高人指点)
比如:追加onsubmit="return validateUserForm(this);"
<html:javascript formName="userForm" staticJavascript="true"/>
分享到:
相关推荐
`<html:form>`是Struts1框架中用于创建HTML表单的标签。它为开发者提供了更多的控制选项,使得表单创建更为灵活且方便。 **基本用法**: - **必需属性**:`action`,用于指定表单提交的目标URL。如果未设置此属性,...
8. `<html:reset>`和`<html:button>`标签:前者创建重置按钮,后者创建自定义功能的按钮,可通过`onclick`事件绑定JavaScript函数。 Struts HTML标签库通过这种方式将业务逻辑和表现层分离,使得代码更加结构化,...
<script language="javascript" type="text/javascript" src="<c:url value='/common/js/common.js' />"></script> ``` 2. **优化服务器配置**: - 检查服务器的虚拟目录设置,确保所有的静态资源(如CSS、JS)...
与HTML的`<form>`标签不同,`<html:form>`的`action`属性需要指定一个Struts的动作(Action),这个动作必须在`struts-config.xml`配置文件中定义。否则,页面在尝试提交时会抛出异常,导致JSP页面无法正常工作。...
在探讨“struts logic:iterater换行”的知识点时,我们首先需要理解Struts框架以及其内嵌的逻辑标签库(Logic Tag Library)中的`<logic:iterate>`标签的使用方式,尤其是如何在迭代过程中实现换行效果。下面将详细...
在`<s:iterator>`内部使用`<s:checkbox>`,可以方便地为数据集中的每个条目生成一个复选框。 全选和反选功能的实现通常涉及以下几个步骤: 1. **创建复选框**:首先,在JSP页面上,使用`s:iterator`遍历数据集,并...
在使用Struts2标签库前,需要在JSP页面中引入相应的标签库,通常使用`<%@taglib>`指令,如`<%@taglib uri="/struts-tags" prefix="s"%>`。对于Servlet2.3之前的版本,可能还需要在web.xml中配置标签库的定义,但...
<%@ taglib prefix="s" uri="/struts-tags" %> <h1>用户列表</h1> <s:iterator value="users"> <div> <s:property value="name"/> | <s:property value="email"/> | <a href="<s:url ...
HTML Tags库则包含了用于创建Struts输入表单的标签,如`<html:base>`, `<html:cancel>`, `<html:select>`, `<html:checkbox>`, `<html:radio>`, `<html:multibox>`, `<html:link>`, `<html:errors>`, `...
<%@ taglib prefix="s" uri="/struts-tags" %> <html> <head> <title>登录页面</title> </head> <body> <s:form action="login" method="post"> <s:textfield name="username" label="用户名" /> <s:password ...
它包括如`<html:form>`、`<html:text>`、`<html:password>`、`<html:submit>`等标签,帮助开发者创建和管理表单数据。例如,`<html:form>`用于定义一个HTML表单,而`<html:text>`则用于创建输入字段,这些标签可以...
4. 此外,HTML标签库还包含许多其他常用的标签,如`<html:form>`用于创建表单,`<html:text>`、`<html:password>`、`<html:textarea>`、`<html:radio>`和`<html:checkbox>`用于创建输入字段,`<html:link>`用于创建...
例如,使用`<s:head>`标签引入CSS和JavaScript资源,`<s:fielderror>`显示字段验证错误,`<s:messages>`展示全局消息。 四、实例解析 以下是一个简单的用户注册表单的示例: ```jsp <%@ taglib prefix="s" uri="/...
2. **显示文本**:`<s:textfield>`用于创建输入字段,`<s:textarea>`用于创建多行文本输入框,它们都支持各种HTML属性,如name、id等,以及Struts2特有的验证规则。 3. **表单处理**:`<s:form>`标签用于创建HTML...
文件名“struts2_05_03_controlTag”可能涵盖了Struts2控制标签的使用,这些标签包括导航和流程控制标签,如 `<s:if>`, `<s:else>`, `<s:switch>`, `<s:iterator>`等,它们帮助开发者根据条件执行不同的操作或循环...
Struts2提供了 `<s:table>`标签,可以方便地创建HTML表格。例如,展示用户数据的表格: ```jsp <s:table list="users"> <s:column label="ID">id</s:column> <s:column label="Name">name</s:column> <s:column ...
Struts2的UI标签还支持其他一些功能,如验证(通过`<s:fielderror>`和`<s:errors>`展示错误信息)、国际化(使用`<s:text>`和`s:resourcebundle`处理多语言)和主题样式(通过`cssClass`属性应用样式)。此外,...
在Struts2中,标签库是其核心特性之一,它们为开发者提供了便利的方式来构建动态用户界面,无需深入HTML和JavaScript的底层细节。在本篇中,我们将深入探讨Struts2的标签应用及其在实际开发中的使用。 首先,了解...
7. **脚本标签(Scripting Tags)**:允许在JSP中嵌入JavaScript或Groovy等脚本语言,如`<s:script>`。 8. **主题和皮肤标签(Theme and Skin Tags)**:Struts2提供了多种主题和皮肤,通过`<s:set>`和`<s:theme>`...
tags"%>` 和 `<%@ taglib prefix="sx" uri="/struts-dojo-tags"%>`:这两行代码引入了Struts2的标签库,`s`前缀用于标准Struts2标签,而`sx`前缀则用于Struts2的Dojo扩展标签,提供了一些与JavaScript库Dojo相关的...