日期:2010-09-09 浏览次数:20474 次
在这些表单中,用户首先输入预订的个人或团体的名称。然后,用户输入一个新预订的开始和结束时间。作为开发者,你必须考虑一个用户所有可能采取的行为-它与该应用程序所期望的可能不一致。ASP.NET和JSF都提供了相应的组件来帮助实现输入校验。ASP.NET校验控件被依附到相关的表单项上并且一旦提交表单即校验该项数据。ASP.NET校验控件包括RequiredFieldValidator、RegularExpressionValidator、RangeValidator和CompareValidator。为了正确校验一个组件,开发者需要编写定制代码,也可以使用一个CustomValidator组件。在一个ASP.NET页面的生命周期中,在数据被回寄到服务器之前,将使用CustomValidator进行校验。这是因为ASP.NET校验控件生成必要的JavaScript来实现在客户端的校验,从而减少服务器负担。然而,ASP.NET总是在服务器端执行这种校验并确保总是进行校验。
JSF也提供了一些标准的校验组件,尽管不如ASP.NET提供的那么丰富。为了编写你自己的校验逻辑,你也可以重载一个JSF组件的validate方法或把校验代理到实现Validator接口的另一个类(你也可以编写你自己的校验组件,但这是一种更复杂的解决方案)。JSF缺乏ASP.NET校验组件提供的内置的JavaScript功能。在恢复组件树之后,立即在服务器端的一个JSF页面上发生校验,但是,这必须是发生在调用任何事件处理器之前。当然,你可以总是提供自己定制的JavaScript校验。有了这些基础,下面让我们分析这些应用程序中的每个用户的预订数据是如何被适当校验的。
这些表单相当简单,但是仍然存在要考虑的校验问题。对于初始订户来说,允许一用户预订一个房间并且不输入一个名字来指定谁在预订意义并不大。因此,应该要求有"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方法: