三、最后,讲一下启用客户端验证的方法。
启用客户端验证,表单无法通过时浏览器会弹出对话框并显示错误消息。
首先,需要再jsp页面上加入:<html:javascript formName= ”loginForm” /> 这样一条语句,其中formName属性的值是我们要验证的form表单的名字,这里我要验证loginForm表单。这条语句应该夹在<body>标签外面,通常是放在<head/>和<body>之间。然后,还需要给我们的表单添加验证方法:<html:form action=”/login” οnsubmit=”return validateLoginForm(this);” />,如果你对validateLoginForm(注意这里的方法命会随着要验证的表单的不同而改变的)方法的具体内容感兴趣,可以用浏览器查看页面源代码来找到。这样这样一来,我们就启用了验证框架的客户端验证功能,表单如果没有通过客户端验证是无法提交到后台的。客户端验证的运行结果如下:
注意,弹出的对话框中有两条消息,第一条是关于name文本框的,第二条是关于password文本框的。
另外,还有一个要注意的地方是我们的信息中username是在validation.xml文件中设置的,我原本写的是user’s name,但是在运行客户端验证的时候,js会报告异常,因为消息中的单引号 ’ 使得客户端的javascript代码运行时出现了问题,所以请尽量避免在消息中使用有特殊意义的符号。
四、消息中文化
首先我们需要建立一个包含中文消息的文件,比如a.txt,然后在这个文件里面按照ApplicationResources.properties的样式书写中文消息,如:errors.required={0} is required.等等,然后在这个文件所在目录中,用cmd命令进行文件编码转化,密令如下:native2acsii -encoding gb2312 a.txt ApplicationResources_zh_CN.propertyies。
注意这里的ApplicationResources_zh_CN.propertyies就是我们需要的中文资源文件,你可以打开看一下内容,是用unicode来表示中文的。这个本地资源文件我们需要把他和我们之前的资源文件ApplicationResources.propertyies放到一起。
最后需要在jsp页面文件中作出修改:<html:html local="true"> ... </html:html>来启用本地资源文件,这样就可以使用本地资源文件(即ApplicationResources_zh_CN.properties)中的中文消息了。
好了,就说道这里吧,如果我还有什么讲得不清楚的地方,可以发消息给我或者QQ联系:30438772。
最后附上我的代码:
代码:
login.jsp-------------------------------------------------------------
<%@ page language="java" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
<html:html local="true">
<head>
<title>JSP for LoginForm form</title>
</head>
<html:javascript formName=”/loginForm” />
<body>
<html:errors/>
<html:form action="/login" οnsubmit=”return validateLoginForm(this);”>
name : <html:text property="name"/><html:errors property="name" /><br/>
password : <html:text property="password"/><html:errors property="password"/><br/>
<html:submit/><html:cancel/>
</html:form>
</body>
</html:html>
-----------------------------------------------------------------------
LoginForm.java----------------------------------------------------
package com.yourcompany.struts.form;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.validator.ValidatorForm;
public class LoginForm extends ValidatorForm {
private String password;
private String name;
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
------------------------------------------------------------------
LoginAction.java--------------------------------------------------------
package com.yourcompany.struts.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.yourcompany.struts.form.LoginForm;
public class LoginAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
System.out.println("come in the LoginAction.class");
LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method stub
String name = loginForm.getName();
String password = loginForm.getPassword();
ActionForward actionForward = null;
if (name.equals("jianghe") && password.equals("123456")) {
System.out.println("success");
actionForward = mapping.findForward("success");
} else {
System.out.println("fail");
actionForward = mapping.findForward("fail");
}
return actionForward;
}
}
-------------------------------------------------------------------------
validation.xml-----------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE form-validation
PUBLIC "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.0//EN"
"http://jakarta.apache.org/commons/dtds/validator_1_0.dtd"
>
<form-validation>
<global>
<constant>
<constant-name>conName</constant-name>
<constant-value>conValue</constant-value>
</constant>
</global>
<formset>
<form name="loginForm">
<field property="name" depends="required,minlength">
<msg name="required" key="myRequired" />
<msg name="minlength" key="myMinlength" />
<arg0 key="${var:myArg}" resource="false"/>
<arg1 name="minlength" key="${var:minlength}" resource="false"/>
<var>
<var-name>myArg</var-name>
<var-value>username</var-value>
</var>
<var>
<var-name>minlength</var-name>
<var-value>3</var-value>
</var>
</field>
<field property="password" depends="required">
</field>
</form>
</formset>
</form-validation>
-----------------------------------------------------------------------
struts-config.xml-----------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
<data-sources />
<form-beans >
<form-bean name="loginForm" type="com.yourcompany.struts.form.LoginForm" />
</form-beans>
<global-exceptions />
<global-forwards />
<action-mappings >
<action
attribute="loginForm"
input="/login.jsp"
name="loginForm"
path="/login"
scope="request"
validate="true"
type="com.yourcompany.struts.action.LoginAction">
<forward name="success" path="/success.jsp" />
<forward name="fail" path="/login.jsp" />
</action>
</action-mappings>
<message-resources parameter="com.yourcompany.struts.ApplicationResources" />
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml, /WEB-INF/validation.xml"/>
</plug-in>
</struts-config>
-----------------------------------------------------------------------
ApplicationResources.properties-----------------------------------
# Resources for parameter 'com.yourcompany.struts.ApplicationResources'
# Project practiceStruts
errors.required = {0} is required;
errors.minlength = {0} can not be less than {1} characters.
myRequired = myMsg: {0} is required;
myMinlength = myMsg: {0} can not be less than {1} characters.
myArg = myArgument
------------------------------------------------------------------