时间:2012-11-02 15:39:13

标签: java jsf

我想要一个表单,在提交和验证后打开一个包含结果的新选项卡。我使用<h:form target="_blank"方法获取新选项卡,但它在新选项卡中显示验证错误。如果验证通过,我希望它只打开新选项卡。

我的猜测是唯一真正的跨浏览器解决方案是在提交时进行一些SJAX验证,但我不确定是否有任何库可以为我做这个。

那么,只有在验证通过后才有办法验证和打开新窗口吗?

3 个答案:

答案 0 :(得分:2)

由于您未提供任何代码示例,我假设您在其中使用了<h:form><h:commandButton>

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

仅当验证通过时,javascript才会点击<h:commandButton>

<h:commandButton

答案 1 :(得分:0)

如果您可以使用JavaScript使用某些AJAX行为调用验证,您可以使用onSubmit事件函数轻松完成此操作,如下所示:

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

答案 2 :(得分:0)

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

<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中设置errorHappened。