1

我有这个用JSF 2.0 facelets编写的应用程序,它有以下代码,应该在jQuery 幻灯片控制的区域中显示一些内容,这意味着你按下一个显示该区域的按钮,然后再次按下它来隐藏它

<f:ajax render="messageID">
      <h:form id="myform" styleClass="form1" >
          <h:message id="messageID" for="signinemail" class="messageforlogin"/>
          <h:panelGrid styleClass="loginpanel" columns="2" cellspacing="4">

          <h:outputText value="Email: "/>
          <h:inputText class="textboxes"  size="20" id="signinemail" 
                      value="#{signinBean.email}" 
                      validatorMessage="Invalid Email, Try Again">
              <f:validateRegex pattern="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"/>

          </h:inputText>

如您所见,如果未正确键入电子邮件,则应显示一条错误消息,并且正如我之前所说,该区域由 jquery.slidetoggle 功能和按钮控制,使其成为幻灯片以输入内容,

问题是当用户按下提交按钮(此处未显示)时,幻灯片冻结并且不显示错误消息,当我删除“ajax”时,显示消息但幻灯片消失,您必须再次按下切换按钮才能查看带有错误消息的幻灯片,我在同一页面中完成了此操作,但没有幻灯片,它非常好。

是否可以显示幻灯片和上面的错误消息???

4

1 回答 1

2

当 JSF ajax 请求完成时,应该重新执行负责设置幻灯片的 jQuery 脚本,这仅仅是因为 ajax 响应用从服务器检索到的新元素更改/替换了 HTML DOM 树中的元素,而这些新元素当然不会不再包含那些 jQuery 初始化的事件处理程序。每次 ajax 请求完成时,jQuery 脚本都不会自动执行,而只会在您刷新页面时自动执行。

您只需要在 JSF ajax 事件回调处理程序中重新调用您的 jQuery 函数,如下所示:

jsf.ajax.addOnEvent(function(data) {
    if (data.status == "success") {
        yourjQueryFunctionWhichAddsTheSlideEvents();
    }
});

另一种方法是使用 OmniFaces' <o:onloadScript>

<o:onloadScript>yourjQueryFunctionWhichAddsTheSlideEvents();</o:onloadScript>

这样你也不再需要$(document).ready()了。

于 2012-06-22T05:24:19.640 回答