通过实例跟我学Struts2从入门到精通——如何应用Struts2客户端JavaScript实现对Web表单进行验证的应用实例

更新时间:2023-08-29 23:59:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

通过代码实例跟我学Struts2框架从入门到精通——如何应用Struts2框架客户端JavaScript实现对Web表单进行验证的应用实例

杨教授工作室精心创作的优秀程序员职业提升必读系列资料

1.1通过代码实例跟我学Struts2框架从入门到精通——如何应用Struts2框架客户端JavaScript实现对Web表单进行验证的应用实例

1.1.1应用Struts2框架客户端JavaScript实现对Web表单进行验证的应用实例

1、将页面中的表单改变为Struts2中的表单标签实现——不支持标准的HTML表单

<%@ page contentType="text/html; charset=gb2312" %>

<%@ taglib prefix="s" uri="/struts-tags"%>

<html>

<head>

<title><s:property value="%{getText('strutsweb.title')}"/></title>

<!-- 此标志的作用是引入Struts 2.0的常用的Javascript和CSS -->

<s:head />

</head>

<body>

<s:form action="i18nUserInfoManageActionModel!doUserLogin.action" method="post"

theme="xhtml" validate="true">

<s:textfield name="userName" label="%{getText('http://www.77cn.com.cnername')}" theme="xhtml"/>

<s:password name="userPassWord" label="%{getText('http://www.77cn.com.cnerpassword')}" theme="xhtml"/>

<s:submit value="%{getText('strutsweb.login.submitbutton')}" theme="xhtml"/>

</s:form>

</body>

</html>

注意:此时需要应用Struts2中的表单标签、标签<Form>标签中需要添加validate属性(并且要设置为true,其中的validate="true"表示支持客户端的校验),另外也不要将theme属性指定为simple(simple表示struts2将把这个解析成普通的HTML标签)。

2、再执行http://127.0.0.1:8080/sshwebcrm/userManage/userLoginI18n.jsp

杨教授工作室,版权所有,盗版必究,1/13页

通过代码实例跟我学Struts2框架从入门到精通——如何应用Struts2框架客户端JavaScript实现对Web表单进行验证的应用实例

杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料

杨教授工作室,版权所有,盗版必究, 2/13页 产生出下面的错误

主要是下面的I18nUserInfoManageActionModel -validation.xml 文件中的错误信息的国际化产生冲突。在页面中无法按照key 加载对应的国际化的信息——但在Struts2.1.8版中没有再出现这样的错误。

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE validators PUBLIC

"-//OpenSymphony Group//XWork Validator 1.0//EN"

"http://www.77cn.com.cn/xwork/xwork-validator-1.0.2.dtd" > <validators>

<field name ="userName">

<field-validator type ="requiredstring">

<message key="http://www.77cn.com.cnerName.required " />

</field-validator>

</field>

<field name ="userPassWord">

<field-validator type ="requiredstring">

<message key="http://www.77cn.com.cnerPassWord.required " />

</field-validator>

<field-validator type="regex">

<param name="expression"><![CDATA[(\w{4,10})]]></param>

<message key="http://www.77cn.com.cnerPassWord.length " /> </field-validator>

</field>

通过代码实例跟我学Struts2框架从入门到精通——如何应用Struts2框架客户端JavaScript实现对Web表单进行验证的应用实例

杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料

杨教授工作室,版权所有,盗版必究, 3/13页 </validators>

网上也有此错误的帖

3、解决的方法

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE validators PUBLIC

"-//OpenSymphony Group//XWork Validator 1.0//EN"

"http://www.77cn.com.cn/xwork/xwork-validator-1.0.2.dtd" > <validators>

<field name ="userName">

<field-validator type ="requiredstring">

<message>userName 必须输入 !</message>

</field-validator>

</field>

<field name ="userPassWord">

<field-validator type ="requiredstring">

<message>userPassWord 必须输入 !</message>

</field-validator>

<field-validator type="regex">

通过代码实例跟我学Struts2框架从入门到精通——如何应用Struts2框架客户端JavaScript实现对Web表单进行验证的应用实例

杨教授工作室精心创作的优秀程序员职业提升必读系列资料

<param name="expression"><![CDATA[(\w{4,10})]]></param>

<message>密码长度必须多于4位</message>

</field-validator>

</field>

</validators>

或者使用<message>${getText("http://www.77cn.com.cnerPassWord.length")}</message>方式获取国际化资源。

4、再执行此页面

同样也没有进行提交。同时,观察URL地址栏中仍然为页面位置,因此没有向后台服务器产生提交行为。

5、查看所产生出的JavaScript代码

(1)查看在userLoginI18n.jsp中所产生的Struts 2.0的常用的Javascript和CSS

杨教授工作室,版权所有,盗版必究,4/13页

通过代码实例跟我学Struts2框架从入门到精通——如何应用Struts2框架客户端JavaScript实现对Web表单进行验证的应用实例

杨教授工作室精心创作的优秀程序员职业提升必读系列资料

出现下面的内容

可以看到部署后的JSP页面中自动生成了我们在校验配置文件中对应的javascript代码。Struts2中并不是所有的服务器端校验都可以转换成客户端校验。客户端校验仅仅支持如下几种校验器:

6、客户端校验仅仅支持如下几种校验器

required validator(必填校验器)

requiredstring validator(必填字符串校验器)

stringlength validator(字符串长度校验器)

regex validator(表达式校验器)

email validator(邮件校验器)

url validator(网址校验器)

int validator(整数校验器)

double validator(双精度数校验器)

7、如果在浏览器端屏蔽JavaScript脚本

杨教授工作室,版权所有,盗版必究,5/13页

通过代码实例跟我学Struts2框架从入门到精通——如何应用Struts2框架客户端JavaScript实现对Web表单进行验证的应用实例

杨教授工作室精心创作的优秀程序员职业提升必读系列资料

再执行,此时客户端的JavaScript将不再起作用,但服务器端的验证程序仍然有效。比如,在下面的URL地址为服务器端的URL地址。

1.1.2为不同逻辑名的Action类中的业务方法提供不同校验要求

(为同一个Action类中的不同的业务方法提供不同的校验要求)

1、理解以如下形式的文件名称是针对Action类的所有的方法的检查——I18nUserInfoManageActionModel-validation.xml

在Action类中除掉execute()方法或者改变为doUserLogin()方法

杨教授工作室,版权所有,盗版必究,6/13页

通过代码实例跟我学Struts2框架从入门到精通——如何应用Struts2框架客户端JavaScript实现对Web表单进行验证的应用实例

杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料

杨教授工作室,版权所有,盗版必究, 7/13页

将出现下面的结果,表明I18nUserInfoManageActionModel -validation.xml 仍然起作用

由于同一个验证的XML 文件不可能对不同的表单实施不同的检查,为此需要提供多个不同的验证配置的XML 文件。

2、在I18nUserInfoManageActionModel 类中提供自定义的业务控制调度方法

doUserLogin

也可以增加doUserRegister 方法

public String doUserRegister(){ //在该方法中进行用户注册的功能实现

boolean returnResult=getUserName().equals("yang1234") &&getUserPassWord().equals("12345678");

if(returnResult){

通过代码实例跟我学Struts2框架从入门到精通——如何应用Struts2框架客户端JavaScript实现对Web表单进行验证的应用实例

杨教授工作室精心创作的优秀程序员职业提升必读系列资料

oneUserInfo=new UserInfoActionForm();

oneUserInfo.setUserName(userName);

oneUserInfo.setUserPassWord(userPassWord);

HttpSession session=ServletActionContext.getRequest().getSession();

session.setAttribute("oneUserInfo", oneUserInfo);

resultMessage =getUserName()+" "+ this.getText("strutsweb.login.success");

}

else{

resultMessage =getUserName()+" "+ this.getText("strutsweb.login.failure");

}

return this.SUCCESS;

}

3、在struts.xml(struts-otherFunction.xml)中为I18nUserInfoManageActionModel类中的doUserLogin方法提供一个新的名称

<action name="validateI18nUserInfoManageActionModel" method="doUserLogin"

class="com.px1987.sshwebcrm.action.I18nUserInfoManageActionModel">

<result name ="input">/userManage/userLoginI18n.jsp</result>

</action>

3、为上面的validateI18nUserInfoManageActionModel提供对应的校验文件

(1)I18nUserInfoManageActionModel-validateI18nUserInfoManageActionModel-validation.xml 格式为:Action类名称-Action别名-validation.xml

杨教授工作室,版权所有,盗版必究,8/13页

通过代码实例跟我学Struts2框架从入门到精通——如何应用Struts2框架客户端JavaScript实现对Web表单进行验证的应用实例

杨教授工作室精心创作的优秀程序员职业提升必读系列资料

内容与前面的I18nUserInfoManageActionModel-validation.xml文件相同。

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE validators PUBLIC

"-//OpenSymphony Group//XWork Validator 1.0//EN"

"http://www.77cn.com.cn/xwork/xwork-validator-1.0.2.dtd" > <validators>

<field name ="userName">

<field-validator type ="requiredstring">

<param name="trim">true</param>

<message key="http://www.77cn.com.cnerName.required" />

</field-validator>

</field>

<field name ="userPassWord">

<field-validator type ="requiredstring">

<param name="trim">true</param>

<message key="http://www.77cn.com.cnerPassWord.required" />

</field-validator>

<field-validator type="regex">

<param name="expression"><![CDATA[(\w{4,10})]]></param>

<message key="http://www.77cn.com.cnerPassWord.length" />

杨教授工作室,版权所有,盗版必究,9/13页

通过代码实例跟我学Struts2框架从入门到精通——如何应用Struts2框架客户端JavaScript实现对Web表单进行验证的应用实例

杨教授工作室精心创作的优秀程序员职业提升必读系列资料

</field-validator>

</field>

</validators>

4、再添加一个新的JSP页面validateUserLogin.jsp

设计该页面的内容

<%@ page contentType="text/html; charset=GB2312" isELIgnored="false" %>

<%@ taglib prefix="s" uri="/struts-tags"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html> <head> <title>

<s:text name="strutsweb.title">

<s:param>(蓝梦CRM系统)</s:param>

</s:text>

</title></head>

<body>

<form

action="${pageContext.request.contextPath}/validateI18nUserInfoManageActionModel.action " method="post" >

<s:text name="http://www.77cn.com.cnername"/>

<input type="text" name="userName" /> <br />

<s:text name="http://www.77cn.com.cnerpassword"/>

<input type="password" name="userPassWord" /> <br />

<input type="submit" value='<s:text name="strutsweb.login.submitbutton"/>'

name="submitButton" />

<input type="reset" value='<s:text name="strutsweb.login.resetbutton"/>' />

杨教授工作室,版权所有,盗版必究,10/13页

通过代码实例跟我学Struts2框架从入门到精通——如何应用Struts2框架客户端JavaScript实现对Web表单进行验证的应用实例

杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料

杨教授工作室,版权所有,盗版必究, 11/13页 </form>

</body>

</html>

5、部署本应用并测试两个不同的方法

(1)

http://127.0.0.1:8080/sshwebcrm/userManage/validateUserLogin.jsp

注意:应该要将前面的缺省的XML 文件(I18nUserInfoManageActionModel -validation.xml )除掉,否则会出现上面的重复验证!

(2)将出现下面的错误

通过代码实例跟我学Struts2框架从入门到精通——如何应用Struts2框架客户端JavaScript实现对Web表单进行验证的应用实例

杨教授工作室精心创作的优秀程序员职业提升必读系列资料

1.1.3为指定的方法配置特殊的校验规则

1、应用的技术背景

当一个Action中有多个业务方法时,我们可能需要对其中的某个方法配置单独的校验规则,比如注册时的要求用户两次输入的密码必须相同等,这时我们可以配置一个单独的校验文件,命名规则为:<actionName>-<methodName>-validation.xml,可以看到这里多了一个方法名,这个方法名就是要校验的业务逻辑在struts.xml配置文件中配置的name,这个文件也要同Action放在同一个目录下。

validateI18nUserInfoManageActionModel-doUserLogin-validation.xml

2、相关的配置项目的代码示例

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE validators PUBLIC

"-//OpenSymphony Group//XWork Validator 1.0//EN"

"http://www.77cn.com.cn/xwork/xwork-validator-1.0.2.dtd" >

<validators>

<field name="userName">

<field-validator type="requiredstring">

杨教授工作室,版权所有,盗版必究,12/13页

通过代码实例跟我学Struts2框架从入门到精通——如何应用Struts2框架客户端JavaScript实现对Web表单进行验证的应用实例

杨教授工作室精心创作的优秀程序员职业提升必读系列资料<param name="trim">true</param>

<message key="http://www.77cn.com.cnerName.required" /> </field-validator>

</field>

<field name="userPassWord">

<field-validator type="requiredstring">

<param name="trim">true</param>

<message key="http://www.77cn.com.cnerPassWord.required" /> </field-validator>

<field-validator type="regex">

<param name="expression"><![CDATA[(\w{4,10})]]></param>

<message key="http://www.77cn.com.cnerPassWord.length" />

</field-validator>

</field>

</validators>

杨教授工作室,版权所有,盗版必究,13/13页

本文来源:https://www.bwwdw.com/article/lr2i.html

Top