使用javascript和JSF进行客户端验证



我使用JSF 2.0和PrimeFaces库。我有一个包含几个输入的页面(其中有两个日历组件)。我想验证第二个日期是否在第一个日期之前,但我希望在客户机中进行验证,如果验证失败,则不要提交表单并显示属于日历的h:消息。PrimeFaces的日历有一个minDate属性,但这只是不允许使用图形日历选择以前的日期,但您仍然可以键入以前的日期并通过验证;所以我也得用javascript。我可以向命令按钮添加一个"onclick"事件来调用执行验证的js函数,但是如果javascript验证失败,我如何阻止JSF提交表单呢?以及如何显示h:消息组件?我想避免使用服务器。谢谢!

日历的代码:

<p:calendar id="dateFrom" value="#{reqAbsences.dateFrom}" 
            navigator="true" showOn="button" 
            required="true" pattern="dd/MM/yyyy" 
            onSelectUpdate="dateTo dateFromVal hourInput timeFrom timeTo"
            selectListener="#{reqAbsences.handleDateFromSelect}"
            mindate="#{reqAbsences.today}" >
                  <f:validator validatorId="DateValidator"/>
</p:calendar>
<p:message id="dateFromVal" for="dateFrom" showSummary="false"/>
<h:outputLabel value="#{text['global.toDate']}"/>
<p:calendar id="dateTo" value="#{reqAbsences.dateTo}" 
            navigator="true" showOn="button"
            onSelectUpdate="dateToVal"
            selectListener="#{reqAbsences.handleDateToSelect}"
            pattern="dd/MM/yyyy" required="true" mindate="#{reqAbsences.dateFrom}">
                   <f:validator validatorId="DateValidator"/>
</p:calendar>
<p:message id="dateToVal" for="dateTo" showSummary="false"/>

简单地说,当验证成功时,JavaScript方法必须返回true。否则返回false

function compareDates()
{
  var validDates=true; 
   /*Write your logic to compare your dates
      */
if(validDates) return true;
else return false;
}

返回false时,您的表单将不会提交给服务器。

假设我们有一个id为"formId"的HTMLFormElement,即:& lt;形式id = " formId "在……& lt;/form>

使用JavaScript的正式方式&DOM停止事件的方法是调用事件对象的"preventDefault"方法(或者将其returnValue属性设置为false,具体取决于浏览器)。

的例子:

函数checkSubmit(e) {Var = e || window.event;

if (needs to cancel submit) {
    if (ev.preventDefault) {
        ev.preventDefault();
    }
    ev.returnValue = false;
    return false;
}

}/*将上述函数分配为上述表单元素的submit事件的事件处理程序*/. getelementbyid("formId")。addEventListener('submit', checkSubmit, false);

希望能有所帮助

相关内容

  • 没有找到相关文章

最新更新