首页 > 解决方案 > 单击具有此属性的 commandButton 后,所有操作都使用 target="_blank"

问题描述

我有 ah:commandButton 属性 onclick="this.form.target='_blank'" 用于在新选项卡中打开 PDF,它运行良好,但在此操作之后,所有其他操作(h:commandLink 或 h:commnadButton)也没有在新选项卡中打开目标属性。

来自 xhtml 文件的片段

<h:form>
 <rich:panel header="User Logs Data">
   <h:panelGrid id="ad" columns="2" columnClasses="fieldlabel,fieldvalue">

      <h:outputText value=" Branch:" />
      <h:selectOneMenu value="#{userLogsInformationController.branch}"
                            converter="#{bankBranchConverter}"
                            disabled="#{not sec:areAllGranted('SHOW_ALL_OUTWARD')}"
                            onchange="submit()"
                            valueChangeListener="#{userLogsInformationController.handleBranchChange}"
                            style="width : 250px;">
     <f:selectItem itemLabel="[Select Branch]"/>
     <f:selectItems value="#{userLogsInformationController.branches}" 
                    var="br" itemLabel="#{br.name}"/>
     </h:selectOneMenu>
  </h:panelGrid>
  <h:panelGrid columns="2">
     <h:commandButton value="Report">
         <f:ajax event="click" execute="@form" listener="#{userLogsInformationController.showReport}" render="@form" />
     </h:commandButton>
     <h:commandButton value="Download" 
                      actionListener="#{userLogsInformationController.downloadReport}"
                      onclick="this.form.target='_blank'" ajax = "false"
                      disabled="#{userLogsInformationController.notAbleToPrint}"/>

     <rich:messages id="messages" style="padding-left:40px; margin-top: 5px"/>
   </h:panelGrid>
  </rich:panel>
 </h:form>

我研究了一些问题,发现第一次,目标等于 _blank 它作为属性添加到表单中。第二次, target="_blank" 仍然存在于表单中,而它不应该存在(此时目标参数未定义)。

我没有得到解决方案,也无法在页面中添加方法。需要一些有关如何解决此问题的指南。

标签: ajaxjsftarget

解决方案


这个答案是从另一个来源收集的。当我们将目标限制为单个操作时,我们需要让表单处于初始状态。通过 oncklick 操作,我们将表单的目标设置为 _blank 页面。点击后,页面在新标签页/页面中打开(触发动作事件)。最后,触发 onblur 动作并将表单再次设置为初始状态(其余按钮将在 _self 页面中打开) 使用此代码,我们可以限制只有 ah:commandbutton 在新页面中打开

<h:commandButton value="Download"
                 actionListener="#{userLogsInformationController.downloadReport}"
                 onclick="this.form.target='_blank'"
                 onblur="this.form.target='_self'"
                 ajax = "false" disabled="#{userLogsInformationController.notAbleToPrint}"/>

推荐阅读