阅读更多
前面的文章:
struts+spring+hibernate 的 web 应用 < 一 > 架构搭建
struts+spring+hibernate 的 web 应用 < 二 > Dao 层代码编写
struts+spring+hibernate 的 web 应用 < 三 > Service 层代码编写
Web 层代码量比较大,涉及的地方也比较多,考虑到文章过于庞大,所以分两篇写。
我们还是先从主要的 action 开始吧。
在 com.game.products.web.actions 包中新建 ProductsAction ,这是一个 DispatchAction ,代码如下:
package
com.game.products.web.actions;

import
java.util.List;

import
javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpServletResponse;

import
org.acegisecurity.AccessDeniedException;
import
org.apache.struts.action.ActionForm;
import
org.apache.struts.action.ActionForward;
import
org.apache.struts.action.ActionMapping;
import
org.apache.struts.actions.DispatchAction;

import
com.game.commons.Pager;
import
com.game.commons.PagerService;
import
com.game.products.model.Products;
import
com.game.products.services.iface.ProductsService;
import
com.game.products.web.forms.ProductsForm;


public
class
ProductsAction
extends
DispatchAction
{
private ProductsService productsService;
private PagerService pagerService;
/**
* 显示所有信息
*/
public ActionForward doGetProducts(
ActionMapping mapping,
ActionForm form,
HttpServletRequest req,
HttpServletResponse res) {
String flag = req.getParameter( " flag " );
int totalRows = productsService.getRows();
String currentPage = req.getParameter( " currentPage " );
String pagerMethod = req.getParameter( " pagerMethod " );
Pager pager = pagerService.getPager(currentPage, pagerMethod, totalRows);
List productsList = productsService.getProducts(pager.getPageSize(), pager.getStartRow());
req.setAttribute( " productsList " , productsList);
req.setAttribute( " PAGER " , pager);
req.setAttribute( " flag " , flag);
req.setAttribute( " totalRows " , String.valueOf(totalRows));
return mapping.findForward( " all " );
}
/**
* 显示一条信息
*/
public ActionForward doGetProduct(
ActionMapping mapping,
ActionForm form,
HttpServletRequest req,
HttpServletResponse res) {
String flag = req.getParameter( " flag " );
String gameId = req.getParameter( " gameId " );
String fieldname = "" ;
String value = "" ;
if (flag.equals( " 2 " )) {
fieldname = (String)req.getParameter( " fieldname " );
value = (String)req.getParameter( " value " );
req.setAttribute( " fieldname " , fieldname);
req.setAttribute( " value " , value);
}
Products pd = productsService.getProduct(gameId);
req.setAttribute( " pd " , pd);
req.setAttribute( " flag " , flag);
return mapping.findForward( " one " );
}
/**
* 添加信息页面
*/
public ActionForward doAddProductPage(
ActionMapping mapping,
ActionForm form,
HttpServletRequest req,
HttpServletResponse res) {
String flag = req.getParameter( " flag " );
req.setAttribute( " flag " , flag);
String fieldname = "" ;
String value = "" ;
if (flag.equals( " 2 " )) {
fieldname = (String)req.getParameter( " fieldname " );
value = (String)req.getParameter( " value " );
req.setAttribute( " fieldname " , fieldname);
req.setAttribute( " value " , value);
}
String maxid = productsService.getMaxID();
req.setAttribute( " maxid " , maxid);
return mapping.findForward( " add " );
}
/**
* 添加信息
*/
public ActionForward doAddProduct(
ActionMapping mapping,
ActionForm form,
HttpServletRequest req,
HttpServletResponse res) {
ProductsForm pf = (ProductsForm)form;
String flag = pf.getFlag();
req.setAttribute( " flag " , flag);
String fieldname = "" ;
String value = "" ;
if (flag.equals( " 2 " )) {
fieldname = pf.getFieldname();
value = pf.getValue();
req.setAttribute( " fieldname " , fieldname);
req.setAttribute( " value " , value);
}
Products pd = new Products();
pd.setGameCapacity(pf.getGameCapacity());
pd.setGameId(pf.getGameId());
pd.setGameMedia(pf.getGameMedia());
pd.setGameNameCn(pf.getGameNameCn());
pd.setGameNameEn(pf.getGameNameEn());
pd.setGameVersion(pf.getGameVersion());
pd.setGameCopyright(pf.getGameCopyright());
pd.setGameContent(pf.getGameContent());
if (pf.getGamePrice().equals( "" )) {
pd.setGamePrice( null );
} else {
pd.setGamePrice(pf.getGamePrice());
}
int sign = 1 ;
try {
productsService.addProduct(pd);
sign = 1 ;
} catch (Exception e) {
sign = 2 ;
}
if (sign == 1 ) {
return mapping.findForward( " success " );
} else {
return mapping.findForward( " failure " );
}
}
/**
* 修改信息
*/
public ActionForward doUpdateProduct(
ActionMapping mapping,
ActionForm form,
HttpServletRequest req,
HttpServletResponse res) {
ProductsForm pf = (ProductsForm)form;
String gameId = pf.getGameId();
String flag = pf.getFlag();
req.setAttribute( " flag " , flag);
String fieldname = "" ;
String value = "" ;
if (flag.equals( " 2 " )) {
fieldname = pf.getFieldname();
value = pf.getValue();
req.setAttribute( " fieldname " , fieldname);
req.setAttribute( " value " , value);
}
Products pd = productsService.getProduct(gameId);
pd.setGameCapacity(pf.getGameCapacity());
pd.setGameId(pf.getGameId());
pd.setGameMedia(pf.getGameMedia());
pd.setGameNameCn(pf.getGameNameCn());
pd.setGameNameEn(pf.getGameNameEn());
pd.setGameVersion(pf.getGameVersion());
pd.setGameCopyright(pf.getGameCopyright());
pd.setGameContent(pf.getGameContent());
if (pf.getGamePrice().equals( "" )) {
pd.setGamePrice( null );
} else {
pd.setGamePrice(pf.getGamePrice());
}
int sign = 1 ;
try {
productsService.updateProductd(pd);
sign = 1 ;
} catch (Exception e) {
sign = 2 ;
}
if (sign == 1 ) {
return mapping.findForward( " success " );
} else {
return mapping.findForward( " failure " );
}
}
/**
* 删除信息
*/
public ActionForward doDeleteProduct(
ActionMapping mapping,
ActionForm form,
HttpServletRequest req,
HttpServletResponse res) {
String flag = req.getParameter( " flag " );
req.setAttribute( " flag " , flag);
String fieldname = "" ;
String value = "" ;
if (flag.equals( " 2 " )) {
fieldname = (String)req.getParameter( " fieldname " );
value = (String)req.getParameter( " value " );
req.setAttribute( " fieldname " , fieldname);
req.setAttribute( " value " , value);
}
String gameId = req.getParameter( " gameId " );
Products pd = productsService.getProduct(gameId);
int sign = 1 ;
try {
productsService.deleteProduct(pd);
sign = 1 ;
} catch (Exception e) {
sign = 2 ;
}
if (sign == 1 ) {
return mapping.findForward( " success " );
} else {
return mapping.findForward( " failure " );
}
}
/**
* 返回信息
*/
public ActionForward doReturnProduct(
ActionMapping mapping,
ActionForm form,
HttpServletRequest req,
HttpServletResponse res) {
String flag = req.getParameter( " flag " );
req.setAttribute( " flag " , flag);
String fieldname = "" ;
String value = "" ;
if (flag.equals( " 1 " )) {
int totalRows = productsService.getRows();
String currentPage = req.getParameter( " currentPage " );
String pagerMethod = req.getParameter( " pagerMethod " );
Pager pager = pagerService.getPager(currentPage, pagerMethod, totalRows);
List productsList = productsService.getProducts(pager.getPageSize(), pager.getStartRow());
req.setAttribute( " productsList " , productsList);
req.setAttribute( " PAGER " , pager);
req.setAttribute( " flag " , flag);
req.setAttribute( " totalRows " , String.valueOf(totalRows));
} else if (flag.equals( " 2 " )) {
fieldname = (String)req.getParameter( " fieldname " );
value = (String)req.getParameter( " value " );
int totalRows = productsService.getRows(fieldname,value);
String currentPage = req.getParameter( " currentPage " );
String pagerMethod = req.getParameter( " pagerMethod " );
Pager pager = pagerService.getPager(currentPage, pagerMethod, totalRows);

req.setAttribute( " fieldname " , fieldname);
req.setAttribute( " value " , value);
List productsList = productsService.queryProducts(fieldname, value,pager.getPageSize(), pager.getStartRow());
req.setAttribute( " productsList " , productsList);
req.setAttribute( " PAGER " , pager);
req.setAttribute( " totalRows " , String.valueOf(totalRows));
}
return mapping.findForward( " all " );
}
/**
* 查询信息
*/
public ActionForward doQueryProduct(
ActionMapping mapping,
ActionForm form,
HttpServletRequest req,
HttpServletResponse res) {
String flag = req.getParameter( " flag " );
req.setAttribute( " flag " , flag);
String fieldname = "" ;
String value = "" ;
fieldname = (String)req.getParameter( " fieldname " );
value = (String)req.getParameter( " value " );
int totalRows = productsService.getRows(fieldname,value);
String currentPage = req.getParameter( " currentPage " );
String pagerMethod = req.getParameter( " pagerMethod " );
Pager pager = pagerService.getPager(currentPage, pagerMethod, totalRows);

req.setAttribute( " fieldname " , fieldname);
req.setAttribute( " value " , value);
List productsList = productsService.queryProducts(fieldname, value,pager.getPageSize(), pager.getStartRow());
req.setAttribute( " productsList " , productsList);
req.setAttribute( " PAGER " , pager);
req.setAttribute( " totalRows " , String.valueOf(totalRows));
return mapping.findForward( " all " );
}

public ProductsService getProductsService() {
return productsService;
}

public void setProductsService(ProductsService productsService) {
this .productsService = productsService;
}

public PagerService getPagerService() {
return pagerService;
}

public void setPagerService(PagerService pagerService) {
this .pagerService = pagerService;
}
}
在 com.game.products.web.forms 包中新建 ProductsForm ,他继承了 ValidatorForm 。代码如下:
package
com.game.products.web.forms;

import
javax.servlet.http.HttpServletRequest;

import
org.apache.struts.action.ActionMapping;
import
org.apache.struts.validator.ValidatorForm;

public
class
ProductsForm
extends
ValidatorForm
{
// Fields
private String gameId; // 编号
private String gameNameCn; // 中文名称
private String gameNameEn; // 英文名称
private String gameCapacity; // 碟数
private String gameVersion; // 版本
private String gameMedia; // 介质
private String gameCopyright; // 版权
private String gamePrice; // 价格
private String gameContent; // 攻略
private String flag;
private String fieldname;
private String value;
// Constructors
public ProductsForm() {
gameId = null ;
gameNameCn = null ;
gameNameEn = null ;
gameCapacity = null ;
gameVersion = null ;
gameMedia = null ;
gameCopyright = null ;
gamePrice = null ;
gameContent = null ;
flag = null ;
fieldname = null ;
value = null ;
}
// reset
public void reset(ActionMapping mapping, HttpServletRequest request) {
gameId = null ;
gameNameCn = null ;
gameNameEn = null ;
gameCapacity = null ;
gameVersion = null ;
gameMedia = null ;
gameCopyright = null ;
gamePrice = null ;
gameContent = null ;
flag = null ;
fieldname = null ;
value = null ;
}
// Property accessors
public String getGameCapacity() {
return gameCapacity;
}

public void setGameCapacity(String gameCapacity) {
this .gameCapacity = gameCapacity;
}

public String getGameId() {
return gameId;
}

public void setGameId(String gameId) {
this .gameId = gameId;
}

public String getGameNameCn() {
return gameNameCn;
}

public void setGameNameCn(String gameNameCn) {
this .gameNameCn = gameNameCn;
}

public String getGameNameEn() {
return gameNameEn;
}

public void setGameNameEn(String gameNameEn) {
this .gameNameEn = gameNameEn;
}

public String getGameVersion() {
return gameVersion;
}

public void setGameVersion(String gameVersion) {
this .gameVersion = gameVersion;
}

public String getGameMedia() {
return gameMedia;
}

public void setGameMedia(String gameMedia) {
this .gameMedia = gameMedia;
}

public String getFieldname() {
return fieldname;
}

public void setFieldname(String fieldname) {
this .fieldname = fieldname;
}

public String getFlag() {
return flag;
}

public void setFlag(String flag) {
this .flag = flag;
}

public String getValue() {
return value;
}

public void setValue(String value) {
this .value = value;
}

public String getGameCopyright() {
return gameCopyright;
}

public void setGameCopyright(String gameCopyright) {
this .gameCopyright = gameCopyright;
}

public String getGameContent() {
return gameContent;
}

public void setGameContent(String gameContent) {
this .gameContent = gameContent;
}

public String getGamePrice() {
return gamePrice;
}

public void setGamePrice(String gamePrice) {
this .gamePrice = gamePrice;
}

}
接着编写配置文件。
在 struts-config 包中新建 struts-config.xml 。代码如下:
xml version="1.0" encoding="ISO-8859-1"
?>
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
>
<
form-beans
>
<
form-bean
name
="productsForm"
type
="com.game.products.web.forms.ProductsForm"
/>
form-beans
>
<
global-forwards
>
<
forward
name
="success"
path
="/products/product_success.jsp"
/>
<
forward
name
="failure"
path
="/products/product_failure.jsp"
/>
global-forwards
>
<
action-mappings
>
<
action
path
="/getProducts"
type
="org.springframework.web.struts.DelegatingActionProxy"
parameter
="method"
scope
="request"
validate
="false"
>
<
forward
name
="all"
path
="/products/products.jsp"
/>
action
>
<
action
path
="/getProduct"
type
="org.springframework.web.struts.DelegatingActionProxy"
parameter
="method"
scope
="request"
validate
="false"
>
<
forward
name
="one"
path
="/products/product.jsp"
/>
action
>
<
action
path
="/deleteProduct"
type
="org.springframework.web.struts.DelegatingActionProxy"
parameter
="method"
scope
="request"
validate
="false"
>
action
>
<
action
path
="/addProductPage"
type
="org.springframework.web.struts.DelegatingActionProxy"
parameter
="method"
scope
="request"
validate
="false"
>
<
forward
name
="add"
path
="/products/addproduct.jsp"
/>
action
>
<
action
path
="/addProduct"
name
="productsForm"
type
="org.springframework.web.struts.DelegatingActionProxy"
parameter
="method"
scope
="request"
validate
="false"
input
="/product_failure.jsp"
>
action
>
<
action
path
="/updateProduct"
name
="productsForm"
type
="org.springframework.web.struts.DelegatingActionProxy"
parameter
="method"
scope
="request"
validate
="false"
input
="/product_failure.jsp"
>
action
>
<
action
path
="/returnProduct"
type
="org.springframework.web.struts.DelegatingActionProxy"
parameter
="method"
scope
="request"
validate
="false"
>
<
forward
name
="all"
path
="/products/products.jsp"
/>
action
>
<
action
path
="/queryProducts"
type
="org.springframework.web.struts.DelegatingActionProxy"
parameter
="method"
scope
="request"
validate
="false"
>
<
forward
name
="all"
path
="/products/products.jsp"
/>
action
>
action-mappings
>
<
message-resources
parameter
="com.game.resources.ApplicationResourcesProducts"
/>
<
plug-in
className
="org.apache.struts.validator.ValidatorPlugIn"
>
<
set-property
property
="pathnames"
value
="/WEB-INF/struts-validator/validator-rules.xml,/WEB-INF/struts-validator/validation.xml"
/>
plug-in
>
struts-config
>
需要注意的是,这里的 action 交由 spring 的 DelegatingActionProxy 管理了。
打开 applicationContext.xml ,接着添加如下代码:
<
bean
name
="/getProducts"
class
="com.game.products.web.actions.ProductsAction"
singleton
="false"
>
<
property
name
="productsService"
>
<
ref
bean
="productsService"
/>
property
>
<
property
name
="pagerService"
>
<
ref
bean
="pagerService"
/>
property
>
bean
>
<
bean
name
="/getProduct"
class
="com.game.products.web.actions.ProductsAction"
singleton
="false"
>
<
property
name
="productsService"
>
<
ref
bean
="productsService"
/>
property
>
bean
>
<
bean
name
="/deleteProduct"
class
="com.game.products.web.actions.ProductsAction"
singleton
="false"
>
<
property
name
="productsService"
>
<
ref
bean
="productsService"
/>
property
>
bean
>
<
bean
name
="/addProductPage"
class
="com.game.products.web.actions.ProductsAction"
singleton
="false"
>
<
property
name
="productsService"
>
<
ref
bean
="productsService"
/>
property
>
bean
>
<
bean
name
="/addProduct"
class
="com.game.products.web.actions.ProductsAction"
singleton
="false"
>
<
property
name
="productsService"
>
<
ref
bean
="productsService"
/>
property
>
bean
>
<
bean
name
="/updateProduct"
class
="com.game.products.web.actions.ProductsAction"
singleton
="false"
>
<
property
name
="productsService"
>
<
ref
bean
="productsService"
/>
property
>
bean
>
<
bean
name
="/returnProduct"
class
="com.game.products.web.actions.ProductsAction"
singleton
="false"
>
<
property
name
="productsService"
>
<
ref
bean
="productsService"
/>
property
>
<
property
name
="pagerService"
>
<
ref
bean
="pagerService"
/>
property
>
bean
>
<
bean
name
="/queryProducts"
class
="com.game.products.web.actions.ProductsAction"
singleton
="false"
>
<
property
name
="productsService"
>
<
ref
bean
="productsService"
/>
property
>
<
property
name
="pagerService"
>
<
ref
bean
="pagerService"
/>
property
>
bean
>
接着编写 web.xml ,代码如下:
xml version="1.0" encoding="GB2312"
?>
DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd"
>

<
web-app
>
<
display-name
>
游戏软件管理系统
display-name
>
<
context-param
>
<
param-name
>
log4jConfigLocation
param-name
>
<
param-value
>
/WEB-INF/classes/log4j.properties
param-value
>
context-param
>
<
context-param
>
<
param-name
>
contextConfigLocation
param-name
>
<
param-value
>
/WEB-INF/spring-context/applicationContext.xml
param-value
>
context-param
>
<
filter
>
<
filter-name
>
Set Character Encoding
filter-name
>
<
filter-class
>
com.game.commons.SetCharacterEncodingFilter
filter-class
>
<
init-param
>
<
param-name
>
encoding
param-name
>
<
param-value
>
GB2312
param-value
>
init-param
>
filter
>

<
filter-mapping
>
<
filter-name
>
Set Character Encoding
filter-name
>
<
url-pattern
>
/*
url-pattern
>
filter-mapping
>
<
listener
>
<
listener-class
>
org.springframework.web.context.ContextLoaderListener
listener-class
>
listener
>

<
listener
>
<
listener-class
>
org.springframework.web.util.Log4jConfigListener
listener-class
>
listener
>
<
servlet
>
<
servlet-name
>
action
servlet-name
>
<
servlet-class
>
org.apache.struts.action.ActionServlet
servlet-class
>
<
init-param
>
<
param-name
>
config
param-name
>
<
param-value
>
/WEB-INF/struts-config/struts-config.xml
param-value
>
init-param
>
<
init-param
>
<
param-name
>
debug
param-name
>
<
param-value
>
3
param-value
>
init-param
>
<
init-param
>
<
param-name
>
detail
param-name
>
<
param-value
>
3
param-value
>
init-param
>
<
init-param
>
<
param-name
>
nocache
param-name
>
<
param-value
>
yes
param-value
>
init-param
>
<
load-on-startup
>
2
load-on-startup
>
servlet
>
<
servlet-mapping
>
<
servlet-name
>
action
servlet-name
>
<
url-pattern
>
*.do
url-pattern
>
servlet-mapping
>
<
welcome-file-list
>
<
welcome-file
>
products/index.jsp
welcome-file
>
welcome-file-list
>

<
taglib
>
<
taglib-uri
>
struts-bean
taglib-uri
>
<
taglib-location
>
/WEB-INF/tld/struts-bean.tld
taglib-location
>
taglib
>

<
taglib
>
<
taglib-uri
>
struts-html
taglib-uri
>
<
taglib-location
>
/WEB-INF/tld/struts-html.tld
taglib-location
>
taglib
>

<
taglib
>
<
taglib-uri
>
struts-logic
taglib-uri
>
<
taglib-location
>
/WEB-INF/tld/struts-logic.tld
taglib-location
>
taglib
>

<
taglib
>
<
taglib-uri
>
struts-nested
taglib-uri
>
<
taglib-location
>
/WEB-INF/tld/struts-nested.tld
taglib-location
>
taglib
>
web-app
>
大家可能注意到了这里有个 Set Character Encoding 过滤器。我们需要在 com.game.commons 包中新建 SetCharacterEncodingFilter 类来过滤编码,类的代码如下:
package
com.game.commons;

import
java.io.IOException;

import
javax.servlet.Filter;
import
javax.servlet.FilterChain;
import
javax.servlet.FilterConfig;
import
javax.servlet.ServletException;
import
javax.servlet.ServletRequest;
import
javax.servlet.ServletResponse;

public
class
SetCharacterEncodingFilter
implements
Filter
{
protected String encoding = null ;
protected FilterConfig filterConfig = null ;
protected boolean ignore = true ;

public void init(FilterConfig filterConfig) throws ServletException {
this .filterConfig = filterConfig;
this .encoding = filterConfig.getInitParameter( " encoding " );
String value = filterConfig.getInitParameter( " ignore " );
if (value == null )
this .ignore = true ;
else if (value.equalsIgnoreCase( " true " ))
this .ignore = true ;
else
this .ignore = false ;
}

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// TODO 自动生成方法存根
if (ignore || (request.getCharacterEncoding() == null )) {
String encoding = selectEncoding(request);
if (encoding != null )
request.setCharacterEncoding(encoding);
}
chain.doFilter(request, response);
}

public void destroy() {
// TODO 自动生成方法存根
this .encoding = null ;
this .filterConfig = null ;
}

protected String selectEncoding(ServletRequest request) {
return ( this .encoding);
}
}
为了项目的测试运行,我们还需要配置 log4j.properties ,这个文件放在 src 根目录下。代码如下:
log4j.rootLogger=info,console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.SimpleLayout
log4j.logger.com.wehave=DEBUG
# log4j.logger.org.springframework=DEBUG
# SqlMap logging configuration
# log4j.logger.com.ibatis=DEBUG
# log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
# log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
# log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.java.sql.Connection=DEBUG
# log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
#log4j.logger.java.sql.ResultSet=DEBUG
#log4j.logger.javax.sql=DEBUG
这是一个简单的 log4j 配置方法,只是在后台打印出需要的数据。如果还有别的需求,可以参考这个文档:如何使用 Log4j ?
为了达到页面验证的目的,我们还需要使用到 struts 的验证框架。
在 struts-validator 中添加 validation.xml 。在这配置验证规则:
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
>
<
formset
>
<
form
name
="productsForm"
>
<
field
property
="gameNameCn"
depends
="required"
>
<
arg0
key
="errors.gameNameCn"
/>
field
>
<
field
property
="gameNameEn"
depends
="required"
>
<
arg0
key
="errors.gameNameEn"
/>
field
>
<
field
property
="gameCapacity"
depends
="integer"
>
<
arg0
key
="errors.gameCapacity"
/>
field
>
<
field
property
="gamePrice"
depends
="float"
>
<
arg0
key
="errors.gamePrice"
/>
field
>
form
>
formset
>
form-validation
>
在同个目录下,添加 validator-rules.xml ,这个在 struts 开发包中有,只需要 copy 过来就可以用了。为了方便大家,我这里将里面配置代码粘贴出来:
xml version="1.0" encoding="ISO-8859-1"
?>
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
>
<
validator
name
="required"
classname
="org.apache.struts.validator.FieldChecks"
method
="validateRequired"
methodParams
="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
msg
="errors.required"
>
<
javascript
>
function validateRequired(form) {
var isValid = true;
var focusField = null;
var i = 0;
var fields = new Array();
oRequired = new required();
for (x in oRequired) {
var field = form[oRequired[x][0]];
if (field.type == 'text' ||
field.type == 'textarea' ||
field.type == 'file' ||
field.type == 'select-one' ||
field.type == 'radio' ||
field.type == 'password' ||
field.type == 'hidden') {
var value = '';
// get field's value
if (field.type == "select-one") {
var si = field.selectedIndex;
if (si >= 0) {
value = field.options[si].value;
}
} else {
value = field.value;
}
if (trim(value).length == 0) {
if (i == 0) {
focusField = field;
}
fields[i++] = oRequired[x][1];
isValid = false;
}
}
}
if (fields.length > 0) {
if(focusField.type!='hidden'){
focusField.focus();
}
alert(fields.join('\n'));
}
return isValid;
}
// Trim whitespace from left and right sides of s.
function trim(s) {
return s.replace( /^\s*/, "" ).replace( /\s*$/, "" );
}
]]>
javascript
>
validator
>
<
validator
name
="requiredif"
classname
="org.apache.struts.validator.FieldChecks"
method
="validateRequiredIf"
methodParams
="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
org.apache.commons.validator.Validator,
javax.servlet.http.HttpServletRequest"
msg
="errors.required"
>
<
javascript
>
function validateRequiredIf(form) {
var isValid = true;
var focusField = null;
var i = 0;
var fields = new Array();
var j=0;
oRequiredif = new requiredif();
for (x in oRequiredif) {
var field = form[oRequiredif[x][0]];
for(var ii=0;ii
if(field[ii].checked==true){
j++;
}
}
if (j == 0) {
if (i == 0) {
focusField = field;
}
fields[i++] = oRequiredif[x][1];
isValid = false;
}
}

if (fields.length > 0) {
alert(fields.join('\n'));
}
return isValid;
}
]]>
javascript
>
validator
>
<
validator
name
="minlength"
classname
="org.apache.struts.validator.FieldChecks"
method
="validateMinLength"
methodParams
="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
depends
=""
msg
="errors.minlength"
>
<
javascript
>
function validateMinLength(form) {
var isValid = true;
var focusField = null;
var i = 0;
var fields = new Array();
oMinLength = new minlength();
for (x in oMinLength) {
var field = form[oMinLength[x][0]];
if (field.type == 'text' ||
field.type == 'textarea'||
field.type == 'password') {
var iMin = parseInt(oMinLength[x][2]("minlength"));
if ((trim(field.value).length > 0) && (field.value.length < iMin)) {
if (i == 0) {
focusField = field;
}
fields[i++] = oMinLength[x][1];
isValid = false;
}
}
}
if (fields.length > 0) {
focusField.focus();
alert(fields.join('\n'));
}
return isValid;
}
]]>
javascript
>
validator
>
<
validator
name
="maxlength"
classname
="org.apache.struts.validator.FieldChecks"
method
="validateMaxLength"
methodParams
="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
depends
=""
msg
="errors.maxlength"
>
<
javascript
>
function validateMaxLength(form) {
var isValid = true;
var focusField = null;
var i = 0;
var fields = new Array();
oMaxLength = new maxlength();
for (x in oMaxLength) {
var field = form[oMaxLength[x][0]];
if (field.type == 'text' ||
field.type == 'textarea'||
field.type == 'password') {
var iMax = parseInt(oMaxLength[x][2]("maxlength"));
if (field.value.length > iMax) {
if (i == 0) {
focusField = field;
}
fields[i++] = oMaxLength[x][1];
isValid = false;
}
}
}
if (fields.length > 0) {
focusField.focus();
alert(fields.join('\n'));
}
return isValid;
}
]]>
javascript
>
validator
>
<
validator
name
="mask"
classname
="org.apache.struts.validator.FieldChecks"
method
="validateMask"
methodParams
="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
depends
=""
msg
="errors.invalid"
>
<
javascript
>
function validateMask(form) {
var isValid = true;
var focusField = null;
var i = 0;
var fields = new Array();
oMasked = new mask();
for (x in oMasked) {
var field = form[oMasked[x][0]];
if ((field.type == 'text' ||
field.type == 'textarea'||
field.type == 'password') &&
(field.value.length > 0)) {
if (!matchPattern(field.value, oMasked[x][2]("mask"))) {
if (i == 0) {
focusField = field;
}
fields[i++] = oMasked[x][1];
isValid = false;
}
}
}
if (fields.length > 0) {
focusField.focus();
alert(fields.join('\n'));
}
return isValid;
}

function matchPattern(value, mask) {
return mask.exec(value);
}
]]>
javascript
>
validator
>
<
validator
name
="byte"
classname
="org.apache.struts.validator.FieldChecks"
method
="validateByte"
methodParams
="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
depends
=""
msg
="errors.byte"
jsFunctionName
="ByteValidations"
>
<
javascript
>
function validateByte(form) {
var bValid = true;
var focusField = null;
var i = 0;
var fields = new Array();
oByte = new ByteValidations();
for (x in oByte) {
var field = form[oByte[x][0]];
if (field.type == 'text' ||
field.type == 'textarea' ||
field.type == 'select-one' ||
field.type == 'radio') {

var value = '';
// get field's value
if (field.type == "select-one") {
var si = field.selectedIndex;
if (si >= 0) {
value = field.options[si].value;
}
} else {
value = field.value;
}
if (value.length > 0) {
if (!isAllDigits(value)) {
bValid = false;
if (i == 0) {
focusField = field;
}
fields[i++] = oByte[x][1];

} else {

var iValue = parseInt(value);
if (isNaN(iValue) || !(iValue >= -128 && iValue <= 127)) {
if (i == 0) {
focusField = field;
}
fields[i++] = oByte[x][1];
bValid = false;
}
}
}
}
}
if (fields.length > 0) {
focusField.focus();
alert(fields.join('\n'));
}
return bValid;
}
]]>
javascript
>
validator
>
<
validator
name
="short"
classname
="org.apache.struts.validator.FieldChecks"
method
="validateShort"
methodParams
="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
depends
=""
msg
="errors.short"
jsFunctionName
="ShortValidations"
>
<
javascript
>
function validateShort(form) {
var bValid = true;
var focusField = null;
var i = 0;
var fields = new Array();
oShort = new ShortValidations();
for (x in oShort) {
var field = form[oShort[x][0]];
if (field.type == 'text' ||
field.type == 'textarea' ||
field.type == 'select-one' ||
field.type == 'radio') {
var value = '';
// get field's value
if (field.type == "select-one") {
var si = field.selectedIndex;
if (si >= 0) {
value = field.options[si].value;
}
} else {
value = field.value;
}
if (value.length > 0) {
if (!isAllDigits(value)) {
bValid = false;
if (i == 0) {
focusField = field;
}
fields[i++] = oShort[x][1];

} else {
var iValue = parseInt(value);
if (isNaN(iValue) || !(iValue >= -32768 && iValue <= 32767)) {
if (i == 0) {
focusField = field;
}
fields[i++] = oShort[x][1];
bValid = false;
}
}
}
}
}
if (fields.length > 0) {
focusField.focus();
alert(fields.join('\n'));
}
return bValid;
}
]]>
javascript
>
validator
>
<
validator
name
="integer"
classname
="org.apache.struts.validator.FieldChecks"
method
="validateInteger"
methodParams
="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
depends
=""
msg
="errors.integer"
jsFunctionName
="IntegerValidations"
>
<
javascript
>
function validateInteger(form) {
var bValid = true;
var focusField = null;
var i = 0;
var fields = new Array();
oInteger = new IntegerValidations();
for (x in oInteger) {
var field = form[oInteger[x][0]];

if (field.type == 'text' ||
field.type == 'textarea' ||
field.type == 'select-one' ||
field.type == 'radio') {
var value = '';
// get field's value
if (field.type == "select-one") {
var si = field.selectedIndex;
if (si >= 0) {
value = field.options[si].value;
}
} else {
value = field.value;
}
if (value.length > 0) {
if (!isAllDigits(value)) {
bValid = false;
if (i == 0) {
focusField = field;
}
fields[i++] = oInteger[x][1];
} else {
var iValue = parseInt(value);
if (isNaN(iValue) || !(iValue >= -2147483648 && iValue <= 2147483647)) {
if (i == 0) {
focusField = field;
}
fields[i++] = oInteger[x][1];
bValid = false;
}
}
}
}
}
if (fields.length > 0) {
focusField.focus();
alert(fields.join('\n'));
}
return bValid;
}

function isAllDigits(argvalue) {
argvalue = argvalue.toString();
var validChars = "0123456789";
var startFrom = 0;
if (argvalue.substring(0, 2) == "0x") {
validChars = "0123456789abcdefABCDEF";
startFrom = 2;
} else if (argvalue.charAt(0) == "-") {
startFrom = 1;
}
for (var n = startFrom; n < argvalue.length; n++) {
if (validChars.indexOf(argvalue.substring(n, n+1)) == -1) return false;
}
return true;
}
]]>
javascript
>
validator
>
<
validator
name
="long"
classname
="org.apache.struts.validator.FieldChecks"
method
="validateLong"
methodParams
="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
depends
=""
msg
="errors.long"
/>
<
validator
name
="float"
classname
="org.apache.struts.validator.FieldChecks"
method
="validateFloat"
methodParams
="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
depends
=""
msg
="errors.float"
jsFunctionName
="FloatValidations"
>
<
javascript
>
function validateFloat(form) {
var bValid = true;
var focusField = null;
var i = 0;
var fields = new Array();
oFloat = new FloatValidations();
for (x in oFloat) {
var field = form[oFloat[x][0]];
if (field.type == 'text' ||
field.type == 'textarea' ||
field.type == 'select-one' ||
field.type == 'radio') {
var value = '';
// get field's value
if (field.type == "select-one") {
var si = field.selectedIndex;
if (si >= 0) {
value = field.options[si].value;
}
} else {
value = field.value;
}
if (value.length > 0) {
// remove '.' before checking digits
var tempArray = value.split('.');
var joinedString= tempArray.join('');

if (!isAllDigits(joinedString)) {
bValid = false;
if (i == 0) {
focusField = field;
}
fields[i++] = oFloat[x][1];

} else {
var iValue = parseFloat(value);
if (isNaN(iValue)) {
if (i == 0) {
focusField = field;
}
fields[i++] = oFloat[x][1];
bValid = false;
}
}
}
}
}
if (fields.length > 0) {
focusField.focus();
alert(fields.join('\n'));
}
return bValid;
}
]]>
javascript
>
validator
>
<
validator
name
="double"
classname
="org.apache.struts.validator.FieldChecks"
method
="validateDouble"
methodParams
="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
depends
=""
msg
="errors.double"
/>
<
validator
name
="date"
classname
="org.apache.struts.validator.FieldChecks"
method
="validateDate"
methodParams
="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
depends
=""
msg
="errors.date"
jsFunctionName
="DateValidations"
>
<
javascript
>
function validateDate(form) {
var bValid = true;
var focusField = null;
var i = 0;
var fields = new Array();
oDate = new DateValidations();
for (x in oDate) {
var value = form[oDate[x][0]].value;
var datePattern = oDate[x][2]("datePatternStrict");
if ((form[oDate[x][0]].type == 'text' ||
form[oDate[x][0]].type == 'textarea') &&
(value.length > 0) &&
(datePattern.length > 0)) {
var MONTH = "MM";
var DAY = "dd";
var YEAR = "yyyy";
var orderMonth = datePattern.indexOf(MONTH);
var orderDay = datePattern.indexOf(DAY);
var orderYear = datePattern.indexOf(YEAR);
if ((orderDay < orderYear && orderDay > orderMonth)) {
var iDelim1 = orderMonth + MONTH.length;
var iDelim2 = orderDay + DAY.length;
var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
if (iDelim1 == orderDay && iDelim2 == orderYear) {
dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");
} else if (iDelim1 == orderDay) {
dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$");
} else if (iDelim2 == orderYear) {
dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$");
} else {
dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$");
}
var matched = dateRegexp.exec(value);
if(matched != null) {
if (!isValidDate(matched[2], matched[1], matched[3])) {
if (i == 0) {
focusField = form[oDate[x][0]];
}
fields[i++] = oDate[x][1];
bValid = false;
}
} else {
if (i == 0) {
focusField = form[oDate[x][0]];
}
fields[i++] = oDate[x][1];
bValid = false;
}
} else if ((orderMonth < orderYear && orderMonth > orderDay)) {
var iDelim1 = orderDay + DAY.length;
var iDelim2 = orderMonth + MONTH.length;
var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
if (iDelim1 == orderMonth && iDelim2 == orderYear) {
dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");
} else if (iDelim1 == orderMonth) {
dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$");
} else if (iDelim2 == orderYear) {
dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$");
} else {
dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$");
}
var matched = dateRegexp.exec(value);
if(matched != null) {
if (!isValidDate(matched[1], matched[2], matched[3])) {
if (i == 0) {
focusField = form[oDate[x][0]];
}
fields[i++] = oDate[x][1];
bValid = false;
}
} else {
if (i == 0) {
focusField = form[oDate[x][0]];
}
fields[i++] = oDate[x][1];
bValid = false;
}
} else if ((orderMonth > orderYear && orderMonth < orderDay)) {
var iDelim1 = orderYear + YEAR.length;
var iDelim2 = orderMonth + MONTH.length;
var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
if (iDelim1 == orderMonth && iDelim2 == orderDay) {
dateRegexp = new RegExp("^(\\d{4})(\\d{2})(\\d{2})$");
} else if (iDelim1 == orderMonth) {
dateRegexp = new RegExp("^(\\d{4})(\\d{2})[" + delim2 + "](\\d{2})$");
} else if (iDelim2 == orderDay) {
dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})(\\d{2})$");
} else {
dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{2})$");
}
var matched = dateRegexp.exec(value);
if(matched != null) {
if (!isValidDate(matched[3], matched[2], matched[1])) {
if (i == 0) {
focusField = form[oDate[x][0]];
}
fields[i++] = oDate[x][1];
bValid = false;
}
} else {
if (i == 0) {
focusField = form[oDate[x][0]];
}
fields[i++] = oDate[x][1];
bValid = false;
}
} else {
if (i == 0) {
focusField = form[oDate[x][0]];
}
fields[i++] = oDate[x][1];
bValid = false;
}
}
}
if (fields.length > 0) {
focusField.focus();
alert(fields.join('\n'));
}
return bValid;
}

function isValidDate(day, month, year) {
if (month < 1 || month > 12) {
return false;
}
if (day < 1 || day > 31) {
return false;
}
if ((month == 4 || month == 6 || month == 9 || month == 11) &&
(day == 31)) {
return false;
}
if (month == 2) {
var leap = (year % 4 == 0 &&
(year % 100 != 0 || year % 400 == 0));
if (day>29 || (day == 29 && !leap)) {
return false;
}
}
return true;
}
]]>
javascript
>
validator
>
<
validator
name
="range"
classname
="org.apache.struts.validator.FieldChecks"
method
="validateIntRange"
methodParams
="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
depends
="integer"
msg
="errors.range"
>
<
javascript
>
function validateRange(form) {
return validateIntRange(form);
}
]]>
javascript
>
validator
>
<
validator
name
="intRange"
classname
="org.apache.struts.validator.FieldChecks"
method
="validateIntRange"
methodParams
="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
depends
="integer"
msg
="errors.range"
>
<
javascript
>
function validateIntRange(form) {
var isValid = true;
var focusField = null;
var i = 0;
var fields = new Array();
oRange = new intRange();
for (x in oRange) {
var field = form[oRange[x][0]];
if ((field.type == 'text' ||
field.type == 'textarea') &&
(field.value.length > 0)) {
var iMin = parseInt(oRange[x][2]("min"));
var iMax = parseInt(oRange[x][2]("max"));
var iValue = parseInt(field.value);
if (!(iValue >= iMin && iValue <= iMax)) {
if (i == 0) {
focusField = field;
}
fields[i++] = oRange[x][1];
isValid = false;
}
}
}
if (fields.length > 0) {
focusField.focus();
alert(fields.join('\n'));
}
return isValid;
}
]]>
javascript
>
validator
>
<
validator
name
="floatRange"
classname
="org.apache.struts.validator.FieldChecks"
method
="validateFloatRange"
methodParams
="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
depends
="float"
msg
="errors.range"
>
<
javascript
>
function validateFloatRange(form) {
var isValid = true;
var focusField = null;
var i = 0;
var fields = new Array();
oRange = new floatRange();
for (x in oRange) {
var field = form[oRange[x][0]];
if ((field.type == 'text' ||
field.type == 'textarea') &&
(field.value.length > 0)) {
var fMin = parseFloat(oRange[x][2]("min"));
var fMax = parseFloat(oRange[x][2]("max"));
var fValue = parseFloat(field.value);
if (!(fValue >= fMin && fValue <= fMax)) {
if (i == 0) {
focusField = field;
}
fields[i++] = oRange[x][1];
isValid = false;
}
}
}
if (fields.length > 0) {
focusField.focus();
alert(fields.join('\n'));
}
return isValid;
}
]]>
javascript
>
validator
>
<
validator
name
="creditCard"
classname
="org.apache.struts.validator.FieldChecks"
method
="validateCreditCard"
methodParams
="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
depends
=""
msg
="errors.creditcard"
>
<
javascript
>
function validateCreditCard(form) {
var bValid = true;
var focusField = null;
var i = 0;
var fields = new Array();
oCreditCard = new creditCard();
for (x in oCreditCard) {
if ((form[oCreditCard[x][0]].type == 'text' ||
form[oCreditCard[x][0]].type == 'textarea') &&
(form[oCreditCard[x][0]].value.length > 0)) {
if (!luhnCheck(form[oCreditCard[x][0]].value)) {
if (i == 0) {
focusField = form[oCreditCard[x][0]];
}
fields[i++] = oCreditCard[x][1];
bValid = false;
}
}
}
if (fields.length > 0) {
focusField.focus();
alert(fields.join('\n'));
}
return bValid;
}

/**
* Reference: http://www.ling.nwu.edu/~sburke/pub/luhn_lib.pl
*/
function luhnCheck(cardNumber) {
if (isLuhnNum(cardNumber)) {
var no_digit = cardNumber.length;
var oddoeven = no_digit & 1;
var sum = 0;
for (var count = 0; count < no_digit; count++) {
var digit = parseInt(cardNumber.charAt(count));
if (!((count & 1) ^ oddoeven)) {
digit *= 2;
if (digit > 9) digit -= 9;
};
sum += digit;
};
if (sum == 0) return false;
if (sum % 10 == 0) return true;
};
return false;
}

function isLuhnNum(argvalue) {
argvalue = argvalue.toString();
if (argvalue.length == 0) {
return false;
}
for (var n = 0; n < argvalue.length; n++) {
if ((argvalue.substring(n, n+1) < "0") ||
(argvalue.substring(n,n+1) > "9")) {
return false;
}
}
return true;
}
]]>
javascript
>
validator
>
<
validator
name
="email"
classname
="org.apache.struts.validator.FieldChecks"
method
="validateEmail"
methodParams
="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
depends
=""
msg
="errors.email"
>
<
javascript
>
function validateEmail(form) {
var bValid = true;
var focusField = null;
var i = 0;
var fields = new Array();
oEmail = new email();
for (x in oEmail) {
if ((form[oEmail[x][0]].type == 'text' ||
form[oEmail[x][0]].type == 'textarea') &&
(form[oEmail[x][0]].value.length > 0)) {
if (!checkEmail(form[oEmail[x][0]].value)) {
if (i == 0) {
focusField = form[oEmail[x][0]];
}
fields[i++] = oEmail[x][1];
bValid = false;
}
}
}
if (fields.length > 0) {
focusField.focus();
alert(fields.join('\n'));
}
return bValid;
}

/**
* Reference: Sandeep V. Tamhankar ([email protected]),
* http://javascript.internet.com
*/
function checkEmail(emailStr) {
if (emailStr.length == 0) {
return true;
}
var emailPat=/^(.+)@(.+)$/;
var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
var validChars="\[^\\s" + specialChars + "\]";
var quotedUser="(\"[^\"]*\")";
var ipDomainPat=/^(\d{1,3})[.](\d{1,3})[.](\d{1,3})[.](\d{1,3})$/;
var atom=validChars + '+';
var word="(" + atom + "|" + quotedUser + ")";
var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
var domainPat=new RegExp("^" + atom + "(\\." + atom + ")*$");
var matchArray=emailStr.match(emailPat);
if (matchArray == null) {
return false;
}
var user=matchArray[1];
var domain=matchArray[2];
if (user.match(userPat) == null) {
return false;
}
var IPArray = domain.match(ipDomainPat);
if (IPArray != null) {
for (var i = 1; i <= 4; i++) {
if (IPArray[i] > 255) {
return false;
}
}
return true;
}
var domainArray=domain.match(domainPat);
if (domainArray == null) {
return false;
}
var atomPat=new RegExp(atom,"g");
var domArr=domain.match(atomPat);
var len=domArr.length;
if ((domArr[domArr.length-1].length < 2) ||
(domArr[domArr.length-1].length > 3)) {
return false;
}
if (len < 2) {
return false;
}
return true;
}
]]>
javascript
>
validator
>
<
validator
name
="requiredArray"
classname
="org.apache.struts.validator.FieldChecks"
method
="validateRequiredArray"
methodParams
="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
depends
=""
msg
="errors.required"
jsFunctionName
="RequiredArrayValidations"
>
<
javascript
>
function validateRequiredArray(form) {
var isValid = true;
var focusField = null;
var i = 0;
var fields = new Array();
var j=0;
oRequired = new RequiredArrayValidations();
for (x in oRequired) {
var field = form[oRequired[x][0]];
for(var ii=0;ii
if(field[ii].value.length>0){
j++;
}
}
if (j < field.length) {
if (i == 0) {
focusField = field;
}
fields[i++] = oRequired[x][1];
isValid = false;
}
}

if (fields.length > 0) {
alert(fields.join('\n'));
}
return isValid;
}
]]>
javascript
>
validator
>
<
validator
name
="integerArray"
classname
="org.apache.struts.validator.FieldChecks"
method
="validateIntegerArray"
methodParams
="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
depends
=""
msg
="errors.integer"
jsFunctionName
="IntegerArrayValidations"
>
<
javascript
>
function validateIntegerArray(form) {
var bValid = true;
var focusField = null;
var i = 0;
var j=0;
var fields = new Array();
oInteger = new IntegerArrayValidations();
for (x in oInteger) {
var field = form[oInteger[x][0]];
for(var ii=0;ii
var value=field[ii].value;
if (value.length > 0) {
if (!isAllDigits(value)) {
bValid = false;
j++;
if(j==1){
focusField = field[ii];
}
} else {
var iValue = parseInt(value);
if (isNaN(iValue) || !(iValue >= -2147483648 && iValue <= 2147483647)) {
bValid = false;
j++;
if(j==1){
focusField = field[ii];
}
}
}
}
}
if (j > 0) {
fields[i++] = oInteger[x][1];
isValid = false;
}
}
if (fields.length > 0) {
focusField.focus();
alert(fields.join('\n'));
}
return bValid;
}

]]>
javascript
>
validator
>
<
validator
name
="floatArray"
classname
="org.apache.struts.validator.FieldChecks"
method
="validateFloatArray"
methodParams
="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
depends
=""
msg
="errors.float"
jsFunctionName
="FloatArrayValidations"
>
<
javascript
>
function validateFloatArray(form) {
var bValid = true;
var focusField = null;
var i = 0;
var j=0;
var fields = new Array();
oFloat = new FloatArrayValidations();
for (x in oFloat) {
var field = form[oFloat[x][0]];
for(var ii=0;ii
var value=field[ii].value;
if (value.length > 0) {
// remove '.' before checking digits
var tempArray = value.split('.');
var joinedString= tempArray.join('');

if (!isAllDigits(joinedString)) {
bValid = false;
j++;
if (j == 1) {
focusField = field[ii];
}
} else {
var iValue = parseFloat(value);
if (isNaN(iValue)) {
j++;
if (j == 1) {
focusField = field[ii];
}
bValid = false;
}
}
}
}
if (j > 0) {
fields[i++] = oFloat[x][1];
isValid = false;
}
}
if (fields.length > 0) {
focusField.focus();
alert(fields.join('\n'));
}
return bValid;
}

]]>
javascript
>
validator
>
<
validator
name
="doubleArray"
classname
="org.apache.struts.validator.FieldChecks"
method
="validateDoubleArray"
methodParams
="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
depends
=""
msg
="errors.double"
/>
<
validator
name
="dateArray"
classname
="org.apache.struts.validator.FieldChecks"
method
="validateDateArray"
methodParams
="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
depends
=""
msg
="errors.date"
jsFunctionName
="DateArrayValidations"
>
<
javascript
>
function validateDateArray(form) {
var bValid = true;
var focusField = null;
var i = 0;
var j=0;
var fields = new Array();
oDate = new DateArrayValidations();
for (x in oDate) {
var field = form[oDate[x][0]];
for(var ii=0;ii
var value=field[ii].value;
var datePattern = oDate[x][2]("datePatternStrict");
if ((value.length > 0) &&
(datePattern.length > 0)) {
var MONTH = "MM";
var DAY = "dd";
var YEAR = "yyyy";
var orderMonth = datePattern.indexOf(MONTH);
var orderDay = datePattern.indexOf(DAY);
var orderYear = datePattern.indexOf(YEAR);
if ((orderDay < orderYear && orderDay > orderMonth)) {
var iDelim1 = orderMonth + MONTH.length;
var iDelim2 = orderDay + DAY.length;
var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
if (iDelim1 == orderDay && iDelim2 == orderYear) {
dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");
} else if (iDelim1 == orderDay) {
dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$");
} else if (iDelim2 == orderYear) {
dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$");
} else {
dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$");
}
var matched = dateRegexp.exec(value);
if(matched != null) {
if (!isValidDate(matched[2], matched[1], matched[3])) {
bValid = false;
j++;
}
} else {
bValid = false;
j++;
}
} else if ((orderMonth < orderYear && orderMonth > orderDay)) {
var iDelim1 = orderDay + DAY.length;
var iDelim2 = orderMonth + MONTH.length;
var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
if (iDelim1 == orderMonth && iDelim2 == orderYear) {
dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");
} else if (iDelim1 == orderMonth) {
dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$");
} else if (iDelim2 == orderYear) {
dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$");
} else {
dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$");
}
var matched = dateRegexp.exec(value);
if(matched != null) {
if (!isValidDate(matched[1], matched[2], matched[3])) {
j++;
bValid = false;
}
} else {
j++;
bValid = false;
}
} else if ((orderMonth > orderYear && orderMonth < orderDay)) {
var iDelim1 = orderYear + YEAR.length;
var iDelim2 = orderMonth + MONTH.length;
var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
if (iDelim1 == orderMonth && iDelim2 == orderDay) {
dateRegexp = new RegExp("^(\\d{4})(\\d{2})(\\d{2})$");
} else if (iDelim1 == orderMonth) {
dateRegexp = new RegExp("^(\\d{4})(\\d{2})[" + delim2 + "](\\d{2})$");
} else if (iDelim2 == orderDay) {
dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})(\\d{2})$");
} else {
dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{2})$");
}
var matched = dateRegexp.exec(value);
if(matched != null) {
if (!isValidDate(matched[3], matched[2], matched[1])) {
j++;
bValid = false;
}
} else {
j++;
bValid = false;
}
} else {
j++;
bValid = false;
}
}
}
if (j > 0) {
fields[i++] = oDate[x][1];
isValid = false;
}
}
if (fields.length > 0) {
alert(fields.join('\n'));
}
return bValid;
}

]]>
javascript
>
validator
>
global
>

form-validation
>