这些表单相当简单,但是仍然存在要考虑的校验问题。对于初始订户来说,允许一用户预订一个房间并且不输入一个名字来指定谁在预订意义并不大。因此,应该要求有"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}$")来指定最大长度。
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中,你不必执行这一步,因为这些控件自身就能够显示错误消息。