打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Qiqi_Boy
線上學英文
線上安全須知
2GB 的信箱空間
用手機收 Hotmail
Spaces取得您專屬的分享空間 | 使用 RSS 同步發佈 | 告訴朋友
說明
Qiqi_Boy
首頁基本資料|網誌|相片|清單|音樂 
基本資料
姓名:伟琪
年齡:23
位置:中國 北京
檢視基本資料詳細資訊
音樂
Favorites
這個分享空間沒有任何的音樂清單。
封存
2005年12月2005年11月2005年10月2005年9月2005年8月2005年7月2005年6月2005年5月2005年4月2005年3月2005年2月2005年1月2004年12月
網誌清單
尚未新增任何項目。
網誌
9月1日
PSP的背景是随着月份而变的,有趣!
今天早上起来PSP的背景变成了紫色!挺好看,可能是因为看蓝色太久了!
买PSP已经快一个月了,现在我的硬盘里面已经有了50多个破解游戏,90多个NEOCD的ROM,下一步打算试试GBA的模拟器,不过好像不是很成熟.
想玩恶魔城.PSP版的不知道什么时候才会出!!!期待ing!!!
上午 08:29 | 永久連結 |回應 (1) |引用通告 (0) |也發佈在您的網誌
永久連結關閉
http://spaces.msn.com/members/qiqiboy/Blog/cns!1ptBPZ5qRqrLPn8CreCEb8VA!200.entry
8月16日
JS中关于延时执行
JS中:
setTimeout()是延时执行一次
setInterval()才是间隔一定时间反复执行
上午 10:19 | 永久連結 |回應 (1) |引用通告 (0) |也發佈在您的網誌
永久連結關閉
http://spaces.msn.com/members/qiqiboy/Blog/cns!1ptBPZ5qRqrLPn8CreCEb8VA!190.entry
7月20日
忙碌的生活总是过得特别快!
一晃来到华旗已经有两个星期,真是过得很快!
总的说来还不错,虽然常加班,但是可能是因为总有新的东西要学,所以并没有感觉到枯燥。
下午 03:47 | 永久連結 |回應 (0) |引用通告 (0) |也發佈在您的網誌
永久連結關閉
http://spaces.msn.com/members/qiqiboy/Blog/cns!1ptBPZ5qRqrLPn8CreCEb8VA!183.entry
7月15日
崩溃!崩溃!崩溃!崩溃!崩溃!崩溃!
明天要加班!!!!!!!我的周末啊!!!!!
下午 12:07 | 永久連結 |回應 (0) |引用通告 (0) |也發佈在您的網誌
永久連結關閉
http://spaces.msn.com/members/qiqiboy/Blog/cns!1ptBPZ5qRqrLPn8CreCEb8VA!182.entry
今天学了Struts-menu的使用方法!挺好用!
在Struts作为表示层框架的应用中,我们可以使用其众多的Struts plug-ins来丰富其功能。大家使用比较多的是使用Struts-Tiles、Struts-Validator,这里我给大家介绍一下Struts-menu,很好用,在没有权限控制时最简单,只需配置文件就可以了;在要菜单权限控制时,可以和Tomcat(或其他J2EE容器)的认证机制结合实现权限控制,也可以利用后台数据库的方式实现权限控制,这里主要介绍数据库方式,比较灵活,本人一直以为容器验证的方式太死板,不易扩充。
Struts-menu是sourceforge的一个项目,可以直接到sourceforge.net下载。下面介绍一下在Struts项目中如何集成Struts-menu。
方式一:先介绍没有权限控制的方式使用:
1、将 /lib/struts-menu.jar 拷贝到 WEB-INF/lib/目录下;
2、将 /lib/struts-menu.tld拷贝到WEB-INF/lib/目录下;
3、将struts-menu.war中的scripts、styles、images目录拷贝到你的应用"/"目录下;
4、修改 web.xml 加入 taglib 的调用。
/WEB-INF/struts-menu.tld/WEB-INF/struts-menu.tld
5、修改 struts-config.xml 加入 plugin描述
6、配置menu-config.xml,如:
type="net.sf.navigator.displayer.DropDownMenuDisplayer"/>type="net.sf.navigator.displayer.SimpleMenuDisplayer"/>type="net.sf.navigator.displayer.CoolMenuDisplayer"/>type="net.sf.navigator.displayer.CoolMenuDisplayer4"/>type="net.sf.navigator.example.PermissionsFormMenuDisplayer"/>type="net.sf.navigator.displayer.ListMenuDisplayer"/>type="net.sf.navigator.displayer.TabbedMenuDisplayer"/>type="net.sf.navigator.displayer.VelocityMenuDisplayer"/>toolTip="Shows usage of themenu displayers using defaults."page="/menutest1.jsp"/>toolTip="Shows customized menu displays."page="/menutest2.jsp"/>toolTip="Shows menu usingCoolMenu3"page="/coolmenu1.jsp"/>toolTip="Shows menu usingCoolMenu3 with forms."page="/coolmenu2.jsp"/>toolTip="Example use of menudisable and permission checkingwith CoolMenus."page="/permissionsForm.jsp"/>toolTip="Shows menu using CoolMenu4"page="/coolmenu4.jsp"/>toolTip="Shows Expandable DHTML list"page="/dhtmlExpandable.jsp"/>toolTip="Shows Dropdown DHTML list"page="/dhtmlDropdown.jsp"/>
说明:断描述了Strut-menu将采用的显示方式,可以在jsp文件中选择Displayer;进行了相关菜单项目的配置,可以在jsp文件中选择显示的菜单。
7、在jsp文件(如Struts-tiles中使用了menu.jsp)中加入,可以通过对useMenuDisplayer来设置菜单的显示风格。
8、可以在浏览其中显示了。
方式二:数据库验证方式
基本配置与方式一一致,只是在JSP中动态构建Menus。
采用数据库验证的方式,后台数据与你的其他数据库验证菜单类似。下面的示例代码中假设从后台数据中得到权限列表ArrayList:res,我下面的示例中的res是在Action中传入的SQLExecutor的结果SQLResults(其实就是ArrayList); Import Struts 的类库:net.sf.navigator.menu.*。菜单显示部分如下:
MenuRepository repository = new MenuRepository();// Get the repository fromthe application scope - and copy the// DisplayerMappings from it.MenuRepository defaultRepository= (MenuRepository)application.getAttribute(MenuRepository.MENU_REPOSITORY_KEY);repository.setDisplayers(defaultRepository.getDisplayers());for (int i=0; i < res.getRowCount();i++) {MenuComponent mc = new MenuComponent();String name = res.getString(i, "name");mc.setName(name);String parent = res.getString(i,"parent_name");//System.out.println(name + ", parent is: " + parent);if (parent != null){MenuComponent parentMenu = repository.getMenu(parent);if (parentMenu == null){System.out.println("parentMenu ‘" + parent + "‘ doesn‘t exist!");// create a temporary parentMenuparentMenu = new MenuComponent();parentMenu.setName(parent);repository.addMenu(parentMenu);}mc.setParent(parentMenu);} else {topMenuList.add(name);}String title = (String)res.getString(i,"title");mc.setTitle(title);String location = (String)res.getString(i,"location");mc.setLocation(location);repository.addMenu(mc);}pageContext.setAttribute("repository", repository);
这样的调用,详细用法可以参考Struts-menu,当然有兴趣的朋友可以把以上代码包装成特定的Javabeans,方便灵活调用。
玩了一阵struts-menu,总体感觉他的xml配置和权限处理,是我最喜欢的部分。但是他在页面展示上不够灵活,这是他的缺点。
这里推荐一个简单配置权限的方式。就是在楼主介绍的方法一的基础上,利用struts-menu adpater的概念,只要在jsp上加上如下代码:
<%try {DropDownPermissionAdapter adapter = new DropDownPermissionAdapter(request);IMenuBO menuBO = new MenuBO();TreeSet menuTree = menuBO.getAllowedMenuList("hello");adapter.initializeMenu(menuTree);request.getSession().getServletContext().setAttribute("AtdMenuAdapter", adapter);}catch(Exception e){e.printStackTrace() ;}%><menu:useMenuDisplayer name="TestDropDownDisplayer"bundle="org.apache.struts.action.MESSAGE"permissions="AtdMenuAdapter"><menu:displayMenu name="01"/></menu:useMenuDisplayer>
其中MenuBO取出的是权限允许的菜单名字。
DropDownPermissionAdapter 实现了如下:
public class DropDownPermissionAdapter implements PermissionsAdapter{protected TreeSet menuTree = null;;/*** 菜单初始化的时候调用* @throws Exception*/public void initializeMenu(TreeSet ts) throws Exception{this.menuTree =ts;}public boolean isAllowed(MenuComponent menu) {if (menuTree == null ||menuTree.contains(menu.getName())) {return true;}else {return false;}}}
下午 12:06 | 永久連結 |回應 (0) |引用通告 (0) |也發佈在您的網誌
永久連結關閉
http://spaces.msn.com/members/qiqiboy/Blog/cns!1ptBPZ5qRqrLPn8CreCEb8VA!181.entry
7月13日
在Struts中使用Validator框架
在Struts中使用Validator框架
作者: Chuck Cavaness
原文: http://www.onjava.com/pub/a/onjava/2002/12/11/jakartastruts.html
译者: javaduke
Email:javaduke@263.net
QQ:658155
MSN:javaduke@hotmail.com
每个应用程序都有责任确保它们插入到后台资料库的数据是合法有效的,毕竟,如果这些应用程序所依赖的数据一旦遭到了破坏,那将是灾难性的,那应用程序还能拿什么来使自己正常运转呢?比如说,使用正规关系数据库的一个应用程序,数据库中的每个字段都有自己一定的规则和约束,来保证存储在其中的数据在一定程度上的正确性。任何要使用后台资料库数据的应用程序都有责任保护它们提交的数据的完整性。
任何试图插入或更新不符合标准的数据的操作都有可能被发现并拒绝。这种检测可能遍布在整个应用程序的每个角落,在表现层可能进行一些验证,在业务逻辑层,商业逻辑对象一般也有商业逻辑的验证,还有在后台资料库也要对数据进行检查。
不幸的是,由于这种验证在应用程序中无处不在,造成了应用程序在一定程度上的验证数据的代码冗余。这并不是应用程序所希望的,因为这种在多处的重复劳动,使得应用程序的部署和维护要花去更多的时间。如果在整个应用程序中,这些验证规则可以重复使用,将使得应用程序更加富有弹性,换句话说就是,部署更快捷,定制更容易,程序更灵活。
Jakarta Commons 项目Validator框架简介
Validator是由David Winterfeldt创建的开源项目,它也是Jakarta Commons的一个子项目。Commons项目主要是提供一些像Validator这样的一些可重用组件。其他著名的Commons组件还有如BeanUtils,Digester,Logging框架等。Validator 1.0版本发布于2002年11月初。
使用Validator的好处
.使用Validator框架比一般的在应用程序的代码中定义验证规则有好多优点,如:
.可以在一处为应用程序定义验证规则;
.验证规则和应用程序是松耦合的;
.服务器端和客户端的验证规则可以在同一处定义;
.配置新验证规则或修改已有验证规则变得更加简单;
.支持国际化;
.支持正则表达式;
.可以用于Web应用程序也可用于标准的Java应用程序;
.采用声明的方法实现而不是编程实现;
除了之外,Validator最大的特征就是自身支持可插性(pluggability)。在文章的后
面你将会看到使用Validator框架内置的验证规则来更好地完成你的工作,而更重要的是,Validator框架允许你自定义验证程序,并插入到框架中。
Struts和Validator的关系
应该指出的是Validator框架本身是因Struts框架而建立的。Validator的创建者David Winterfeldt在使用Struts的过程中发现,在许多ActionForm类中需要反复使用同一个验证规则,这样造成了大量的代码冗余。于是他决定创建Validator框架来消除这种冗余,这样Validator就诞生了。
尽管Validator架构最初是为Struts架构而生,但它还是被设计和构造成了可以独立于Struts架构而单独使用。这一个特征使得你可以在任何的应用程序中使用这个框架,不必管它是不是Struts架构的。并不会因为你不使用Struts框架而影响Validator架构对你的应用程序作用。事实上,这就是为什么Validator是Jakarta Commons项目的一部分而不直接是Struts项目的一部分。
现在,我们来将这个框架整合应用到像基于Struts构架这样的Web应用程序上。在文章的最后中我们再介绍如何把它应用到其他类型的应用程序中,如基于EJB的应用程序。
Validator组件概述
Validator架构有下面这些组件组成:
Validators;
配置文件;
资源绑定;
JSP自定义标签;
Validator Form类;
什么是Validators?
一个Validator就是,执行一个验证规则时Validator框架调用的一个Java类。框架根据配置文件中定义的方法签名来调用这个Validaotor类。一般情况下,每个Validator类提供一个单独的验证规则,然后这些规则可以组合成更复杂的规则集。
注意:有时出于方便,一个Validator类也可以定义多个验证规则,而每个规则是一个静态方法且并不包含任何客户端状态信息。
框架提供了14种默认的验证规则,有时候这些规则也被称为Validator框架的“基本规则”,这些基本规则如表一:
名称 描述
byte,short,integer, 检验值是否能被转换成对应的基本数据类型
long,float,double
creditCard 检验输入域是否是一个合法的信用卡号码
date 检验输入域是否是一个合法日期
email 检验输入是否是一个合法Email地址
mask 检验输入域是否能成功匹配一个正则表达式
maxLength 检验值的长度是否小于等于给定的最大长度
minLength 检验值的长度是否大于等于给定的最小长度
range 检验值的范围是否在最大值和最小值之间
required 检验输入域是否为不为空,或不包含空格值的长度是否大于零
表一
正像你在表一中看到的,Validator框架提供了Web应用程序需要的大多数的验证规则。你可以使用这些现有的验证规则来创建自己验证配置文件。尽管这样,也正如我们前面提到的,和后面要讲到的,你可以根据你的需要随意的增加更多的Validator。
现在,让我们来讨论如何在一个基于Struts架构的应用程序中配置使用这些基本的Validator。
使Validator框架具有弹性的原因在于所有的验证规则和其具体细节都是通过在外部文件中配置声明实现的。你的应用程序并不必要知道这些具体的验证规则。这一特征使得规则集的发生扩展和修改时,你并不用去动你应用程序的源代码。这一点对你要进行每次的个性化安装或当需求发生变化时来说是非常重要的。
如果你使用Struts1.1的Validator框架,你会用到这样两个配置文件,一个叫validator- rules.xml,另一个叫validation.xml;其实你也可以随意的给他们命名,甚至可以把它们合并成一个XML文件。但是,你还是最好把它们分开,因为它们各有各的用途。
注意:如果你从Jakarta网站上下载Validator,并不包含这两个文件。只有在包含的Validator框架的Struts的下载中才可以找到这两个文件。
validator-rules.xml文件
validator-rules.xml文件定义应用程序可以使用的Validator。validator-rules.xml充当模板的作用,定义所有应用程序可能要用到的Validator。
注意:这个xml文件和我们下面要讨论的另一个xml文件都应该放到类加载器可以找得到的地方。当我们在Web应用程序中使用Validator框架时,正确的位置应该是在WEB-INF下。
validator-rules.xml文件服从validator- rules_1_1.dtd的管理,validator- rules_1_1.dtd可以在jakarta.apache.org/struts/dtds/validator- rules_1_1.dtd下载到。我们并不想花太多的时间放在研究这个文件的具体细节上,我们在这儿只作一些基本的介绍。
validator-rules.xml文件中最重要的元素包含在<validator>元素中,例如,例一:
例一:一个简单的validator-rules.xml文件
<form-validation>
<global>
<validator
name="required"
classname="org.apache.struts.util.StrutsValidator"
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"/>
<validator name="minlength"
classname="org.apache.struts.util.StrutsValidator"
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="required"
msg="errors.minlength"/>
</global>
</form-validation>
应用程序使用的每个Validator对应一个<validator>元素。在例一中给大家展示了两个Validator,一个是请求Validator,另一个是最小长度Validator。<validator>元素支持许多属性。这些属性是必要的,用于告知框架这个Validator应当调用哪个正确的类和方法。例如,例一中的请求Validator元素表明这个Validator将调用org.apache.struts.util.StrutsValidator类的validateRequest()方法。Validator也可能要依赖另一个Validator,如例一中的最小长度的Validator就是这样一个例子,它包含一个depends属性,用它来表示这个Validator将依赖于请求Validator。msg属性用一个键值指定一个资源绑定,框架将用它来生成正确的错误信息。资源绑定的使用有益于错误信息的本地化。
<validator>元素还支持<javascript>子元素,允许你指定一个客户端运行的JavaScript函数。这样服务器端和客户端验证可以在同一处指定,这使应用程序的维护变得简单。
validation.xml文件
Validator框架的第二个配置文件就是这个叫validation.xml的文件。其实你可以随意把它命名为你喜欢的任何名字,也可以把它放到validator-rules.xml文件中。
validation.xml用于把你在validator-rules.xml中定义的各个Validator和你的应用程序中的组件映射起来。由于我们在这里讨论的是在Struts中使用Validator框架,那么在这里validation.xml就是把这些Validator和Struts的ActionForm类建立映射。ActionForm类其实是一个类似JavaBean一样的类,在Struts中用于捕捉用户输入并帮助传输这些输入到下一级应用程序组件。ActionForm也提供了在用户输入被传到业务逻辑层之前验证这些输入的便利场所。例二是一个简单的validation.xml:
例二:一个简单的validation.xml文件
<form-validation>
<formset>
<form name="checkoutForm">
<field
property="firstName"
depends="required">
<arg0 key="label.firstName"/>
</field>
<field
property="lastName"
depends="required">
<arg0 key="label.lastName"/>
</field>
</form>
</formset>
</form-validation>
例二向大家展现了一个name属性叫checkoutForm的一个<form>元素。checkoutForm是一个在Struts配置文件中定义的一个ActionForm Bean。所以,例二的XML文件就是把这个ActionForm Bean和请求Validator建立映射,Bean的firstName和lastName属性分别对应XML文件中相应的firstName和lastName<field>元素。
其实它还有许多其它作用,如可以在validation.xml中定义常量和全局变量,用于在整个文件中使用,当你想使时可以方便的反复使用。对于validation.xml的元素和属性更详细的解释,可以下载jakarta.apache.org/struts/dtds/validation_1_1.dtd参阅。
资源绑定
资源绑定用于帮助消息本地化和一些其它文本信息的本地化处理。由于它减少了应用程序的许多冗余的硬编码,故对应用程序有很大益处。比如,如果你要在JSP页面中要使用一个“Name”标签时,你可以把这个字符串放到一个资源绑定中,然后使用资源绑定的一个逻辑键值引用这个字符串,而不是直接使用这个字符串,这样做的好处在于,当你想把这个字符串改为“First Name”时,你只需在资源绑定中修改一处即可,而不必修改整个应用程序的全部代码。
对于Validator框架,当验证规则失败的时候,可以从资源绑定中创建错误信息。Validator框架提供几种默认消息,同一般的应用程序消息资源放在一起。如下:
#Normal resource bundle messages
label.firstName=First Name
label.lastName=Last Name
#Error messages used by the Validator
errors.required={0} is required.
errors.minlength={0} can not be less than {1} characters.
errors.maxlength={0} can not be greater than {1} characters.
errors.invalid={0} is invalid.
...
当一个验证规则失败时,这个验证规则创建一个错误信息。框架将自动给消息插入参数。比如说,我们使用例一和例二的验证规则,当checkoutForm的firstName属性为空时,我们会看到这样的错误信息:
First Name is required.
你也可以修改绑定或配置文件来显示你喜欢的消息。
“挂”Validator到Struts上
现在我们已经了解了Validator框架,感觉蛮不错吧!下面我们将快速的讲一下我们是如何轻松地在Struts框架中使用Validator框架的。
首先要做的就是让Struts框架认识Validator框架。你可以使用Struts1.1的Plug-in新特性来实现它。只要在Struts配置文件中增加下面代码即可:
<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就可以自动识别Validator框架了。
另外一个必需的步骤就是创建ActionForm Bean(标准的或是动态的)和确保Validator框架的配置文件是可用的,这样就搞定了。并不需要作一些调用验证规则或做其他具体的事情,Struts框架会自动完成这些工作,这就是所谓的基于声明的配置。然后当验证规则失败的时候,你就可以用JSP标签看到显示的错误信息了。
创建自己的Validator
尽管Validator框架已为大家提供了Web应用程序需要的大多数验证规则,但有时我们还是需要创建一些自己的验证规则。幸运的,Validator框架的扩展性相当好,为你提供了这种便利,而这样做对程序造成的影响相当小的。
创建自己的Validator并不是一件难事,只要创建一个实现这个规则的Java类即可。比如,(在国外)要去超市买二锅头,要验证顾客是否达到合法饮酒年龄。你可以使用已有的验证规进行验证,但我们觉得创建一个验证规则进行验证要更加直截了一些。验证饮酒年龄规则Validator Java代码如下:
例三:自定义验证规则
import java.io.Serializable;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.validator.Field;
import org.apache.commons.validator.GenericValidator;
import org.apache.commons.validator.ValidatorAction;
import org.apache.commons.validator.ValidatorUtil;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.util.StrutsValidatorUtil;
public class NewValidator implements Serializable{
public static boolean validateDrinkingAge( Object bean,
ValidatorAction va,
Field field,
ActionErrors errors, HttpServletRequest request) {
String value = null;
if (isString(bean)) {
value = (String) bean;
} else {
value =
ValidatorUtil.getValueAsString(bean, field.getProperty());
}
String sMin = field.getVarValue("drinkingAge");
if (!GenericValidator.isBlankOrNull(value)) {
try {
int iValue = Integer.parseInt(value);
int drinkingAge = Integer.parseInt(sMin);
if ( iValue < drinkingAge ){
errors.add(field.getKey(),
StrutsValidatorUtil.getActionError(request, va, field));
return false;
}
} catch (Exception e) {
errors.add(field.getKey(),
StrutsValidatorUtil.getActionError(request, va, field));
return false;
}
}
return true;
}
private static boolean isString(Object o) {
if (o == null) {
return (true);
}
return (String.class.isInstance(o));
}
}
你创建完新的Validator之后,你只要把他加到现存的Validator框架的validator-rules.xml的列表中,你就可以像使用基本验证规则一样使用你自己创建的验证规则。
在非Struts应用程序中使用Validator框架
正像我们在前面谈到的,Validator框架最初是为在Struts框架中使用而设计的。可是,Validator框架设计的相当灵活,并没有直接把它耦合在Struts框架中,这样你就可以在普通的应用程序中也可以使用Validator框架来进行验证。但是,你必须执行一些必需的步骤。
你可以利用像在Web应用程序中一样使用配置文件。这也是使用Validatoe框架的另一个优点。你可以在Struts框架使用插件的方式来定位和装载这些文件。而在非Struts应用程序中你必须人为地手动的定位和装载这些配置文件。下面就是应用程序在启动时一般要调的方法:
...
ValidatorResources resources = new ValidatorResources();
InputStream rules =
ValidateExample.class.getResourceAsStream("validator-rules.xml");
ValidatorResourcesInitializer.initialize(resources, in);
InputStream forms =
ValidateExample.class.getResourceAsStream("validation.xml");
ValidatorResourcesInitializer.initialize(resources, forms);
...
这段代码片断创建了一个ValidatorResources实例,并根据两个配置文件进行了初始化。然后你就可以在你应用程序使用这个ValidatorResources对象验证你配置的JavaBean了。
例四向你展示如何使用已初始化的ValidatorResources对象来验证一个Person Bean。
例四:如何使用Validator验证你的Bean。
//假设我们已经创建和装配了一个CheckoutForm Bean对象
CheckoutForm form = new CheckoutForm();
//使用chekoutForm创建一个Validator
Validator validator = new Validator(resources, "checkoutForm");
//告诉Validator要验证哪个Bean
validator.addResource(Validator.BEAN_KEY, form);
//验证checkoutForm对象并存储验证结果
ValidatorResults results = validator.validate();
在例四中,我们看到我们把checkoutForm JavaBean的名字传给Validator类的构造器,这是为了告诉Validator实例使用哪套验证规则来验证这个Bean。
正如你看到的一样,在非Struts应用程序中使用Validator框架显得有点不自动化,但是它还是提供了比较灵活的解决方案。使用Validator框架的另一个好处就是把验证从源代码中分离到外部的配置文件中。这使我们可以把更多的时间放在我们的业务逻辑开发上。
客户端VS服务器端Validator
最后我们简单的阐述一下Validator框架对JavaScript的支持。因为有些应用程序需要执行一些客户端验证,在某些时候使用JavaScript进行一些客户端的验证是很有必要的。这里的客户端我们一般特指Web浏览器。
Validator框架提供使用配置文件中的规则动态和自动生成JavaScript验证规则的支持。对于每个<validator>元素,它可以有一个<javascript>子元素和包含一些JavaScript代码。当包含一些自定义标签的JSP页面被解释时,JavaScript也被解释,并当表单提交时执行这些验证规则。这些叫JavaScriptValidatorTag的标签被包含在Struts的标签集中。这些标签可以像这样进行使用:
<html:javascript formName="checkoutForm"/>
笔者认为在需要时使用一定的JavaScript是可以接受的。当你需要执行一些客户端的验证时,使用Validator框架标签是也是一种不错的选择,而且支持根据用户的区域进行本地化。
结束语
到此为止,我给大家简单地介绍了Validator框架,这些其实是框架的一些表面的东西。这个框架的内容深不可测,仅正则表达式就可以写一本小册子。
像任何一个框架一样,Validator框架为大家提供的是一个基础的架构,你可以根据你的需求对其进行扩展和个性化。使用像Validator的框架的最重要的一点就是它们是经过千锤百炼,是技术的精华。。你并不需重蹈前人失败的覆辙,你可以节省下时间把更多的精力集中在对业务逻辑的开发上。
作者简介:
Chuck Cavaness:毕业于Georgia Tech,获计算机工程与科学学位,在医疗,银行和B2B领域创建了许多Java企业系统,同时也是O‘Reilly的Programming Jakarta Struts 和 Jakarta Struts Pocket Reference两本书的作者。
下午 03:38 | 永久連結 |回應 (0) |引用通告 (0) |也發佈在您的網誌 |JAVA
永久連結關閉
http://spaces.msn.com/members/qiqiboy/Blog/cns!1ptBPZ5qRqrLPn8CreCEb8VA!180.entry
7月12日
奇怪的runtime.exec()问题!
如果直接用Runtime rt = Runtime.getRuntime();Process pcs = rt.exec("your command");System.out.println(pcs.waitFor());pcs不会结束.很奇怪.如果用如下代码就正常了Runtime rt = Runtime.getRuntime();Process pcs = rt.exec("your command");BufferedReader br = new BufferedReader(new InputStreamReader(pcs.getInputStream()));String line = null;while((line = br.readLine()) != null){ System.out.println(line);}br.close();pcs.waitFor();int ret = pcs.exitValue();System.out.println(ret);
下午 10:39 | 永久連結 |回應 (0) |引用通告 (0) |也發佈在您的網誌
永久連結關閉
http://spaces.msn.com/members/qiqiboy/Blog/cns!1ptBPZ5qRqrLPn8CreCEb8VA!179.entry
相簿
| |
載入中...
国美三期进度10月13日
6 張相片
最後更新:2005/10/14
国美三期工程进度8月19日
7 張相片
最後更新:2005/8/19
国美三期进度图片7月31日
5 張相片
最後更新:2005/8/1
毕业一周年聚会
5 張相片
最後更新:2005/6/21
上班的地方
2 張相片
最後更新:2005/6/21
国美三期进度(5月31日)
4 張相片
最後更新:2005/6/3
朋友从瑞士拍回的照片
13 張相片
最後更新:2005/6/3
自訂清單
BOBO
Willis
XSW
尚未新增任何項目。
©2005 Microsoft.   使用規定   MSN 隱私權聲明   意見反應  管理辦法  回報濫用  說明
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
java面试-ssh-1
Struts第4天
Validator验证框架使用教程
用Struts Validator检查你的表单
关于struts2 验证框架在联网的时候可以用,不联网不起作用的问题
Validator验证框架
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服