当ASP.NET撞上JSF之校验输入方式的差异
2008-04-09 04:03:39来源:互联网 阅读 ()
ASP.NET预订表单
JSF预订表单
在这些表单中,用户首先输入预订的个人或团体的名称。然后,用户输入一个新预订的开始和结束时间。作为开发者,你必须考虑一个用户所有可能采取的行为-它与该应用程序所期望的可能不一致。ASP.NET和JSF都提供了相应的组件来帮助实现输入校验。ASP.NET校验控件被依附到相关的表单项上并且一旦提交表单即校验该项数据。ASP.NET校验控件包括RequiredFieldValidator、RegularExpressionValidator、RangeValidator和CompareValidator。为了正确校验一个组件,开发者需要编写定制代码,也可以使用一个CustomValidator组件。在一个ASP.NET页面的生命周期中,在数据被回寄到服务器之前,将使用CustomValidator进行校验。这是因为ASP.NET校验控件生成必要的JavaScript来实现在客户端的校验,从而减少服务器负担。然而,ASP.NET总是在服务器端执行这种校验并确保总是进行校验。
这些表单相当简单,但是仍然存在要考虑的校验问题。对于初始订户来说,允许一用户预订一个房间并且不输入一个名字来指定谁在预订意义并不大。因此,应该要求有"Reservation Team"域。在ASP.NET中,这是通过把一个RequiredFieldValidator控件从控件面板拖动到表单上实现的。ControlToValidate属性应该读取"lblReserveTeam"。在属性面板上,你可以指定用户应该收到的错误文本。我添加了下列错误消息:"You must enter a Reservation Team"。相应的描述预订团队的JSF文本域组件并不需要一个单独的校验组件,因为这个组件已经包含一个"required"属性。简单地检查这个属性就可以实现强迫用户输入一个值。
接下来,你可以限制"Reservation Team"域的文本长度。你可能还记得相应的数据库域只有45个字符长。因此,用户应该被限制输入小于或等于45个字符。在JSF应用程序中,一个LengthValidator组件可能被从组件面板的Validators部分拖动到该域中并且指定45作为它的最大长度。至于它的错误文本属性,你可以输入"Reservation Team cannot exceed 45 characters"。ASP.NET并没有标准的校验控件来限制域长度。而是,你可以依靠RegularExpressionValidator控件-它允许经由一个正规表达式(例如"^[sS]{,45}$")来指定最大长度。
应该检查开始时间和结束时间以确保开始时间小于或等于结束时间。ASP.NET提供了一个CompareValidator-它适合于在绝大多数情况下比较两个域时。然而,既然这里使用了Calendar组件,那么你可不必实现这一功能-因为CompareValidator并不支持这个组件。在这个特定的例子中,我必须把这些日期赋值给两个文本域并且对之进行校验。另一个选项是在Page_Load事件过程本身编写校验逻辑。因为JSF没有标准的校验组件来比较这两个域,所以我必须编写校验逻辑-通过实现开始时间组件的validate方法:
public void calendarStart_validate(FacesContext fc, UIComponent uic, Object o) {
if (this.calendarStart.getSelectedDate().after(this.calendarEnd.getSelectedDate()) ) {
throw new ValidatorException(new FacesMessage
("The start time must come before the end reservation time."));
}
}
你将注意到,在上面的JSF校验逻辑中引用了一个FacesMessage组件。在JSF中,要求使用一个消息组件来显示与域相关的输出文本。为此,我从组件面板上增加了一个Message组件并且把它依附到的正确表单域上-通过把它拖动到这个域上方式实现。一旦这一操作未完成,那么当校验失败时,就会显示针对相应的出错组件的错误消息。在ASP.NET中,你不必执行这一步,因为这些控件自身就能够显示错误消息。
另一组重要的JSF组件被称作"转换器"。这些组件负责实现在表单数据和对象模型之间的来回转换。在JSF中有一些默认的转换器可用来实现普通转换(如把String转换成Integer,把String转换成Date等)。对于调用应用程序对象的更为复杂的转换,可以创建定制的转换器。正如你在上面的代码可以看到的,这个JSF日历组件有一个方法getSelectedDate。这是因为这个组件已经包括它自己的转换器。尽管这个JSF应用程序不会要求使用转换器,但是你应该熟悉JSF转换器的使用,因为它们有助于减少代码的编写和运行时刻转换错误。相比之下,ASP.NET并没有提供一组标准的转换器。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash