<h:表单目标= 仅在验证后"_blank"



我想要一个表格,提交和验证后,将打开一个新选项卡,其中包括结果。我使用<h:form target="_blank"方法获取新选项卡,但它在新选项卡中显示了验证错误。我希望它仅在通过验证时打开新标签。

我的猜测是唯一真正的交叉浏览器解决方案是进行一些SJAX验证,但是我不确定是否有任何库会为我做到这一点。

那么,只有在验证通过时,是否有一种方法可以验证和打开一个新窗口?

由于您没有提供任何代码示例,所以我认为您正在使用<h:form><h:commandButton>

如果是这样,您必须做一个简单的技巧来克服这个问题。您必须使用<a4j:commandButton>代替<h:commandButton>并将<h:commandButton>隐藏。然后使用<a4j:commandButton>oncomplete事件来确定是否 click CC_9。

javaScript单击<h:commandButton,仅在传递验证时才单击。

<h:form target="_blank">
  <h:inputText value="" required="true" id="txt"/>
  <rich:message for="txt"/>
  <a4j:commandButton value="Submit" action="#{bean.someMethod()}"           
    oncomplete="if(#{!(facesContext.maximumSeverity.ordinal ge 2)}){
    #{rich:element('btn')}.click();}"/>
  <h:commandButton value="temp" id="btn" style="display:none;"/>
</h:form>

如果您可以使用JavaScript使用AJAX行为使用JavaScript进行验证,则可以通过使用onSubmit事件函数如下:

   function fnSubmit(){
     var validated= performValidation();
     if(validated){
         document.getElementById('formName').target="_blank";
         document.getElementById('formaName').submit();
     }
   }

我被这个线程所吸引,为我的问题找到了解决方案。所以我决定也发布我的。如果发生错误,我需要留在同一站点上,如果不打开带有以打印页面的新标签。

<h:form target="#{printBean.isErrorHappened() ? '_self' : '_blank'}"
     id="formPrintSearchResult">
     <h:commandLink id="cmdLinkPrintSearchResult"
          value="Print overview"
          onmouseover="#{rich:element('checkForErrors')}.click();"
          action="#{printController.printSearch()}" />
      <a4j:commandLink id="checkForErrors" style="display:none;" 
          render="formPrintSearchResult" />
</h:form>   

如果您愿意,则可以在A4J:CommandLink上包含另一个操作以检查错误并在PrintBean中设置错误。

最新更新