在JSF中单击按钮时连续两个事件

时间:2012-08-22 07:11:00

标签: jsf jstl

我必须在点击按钮时执行两项操作。

  1. 调用bean中的一个方法,该方法将返回一个url,并将在某个变量中设置。

  2. 之后我必须在另一个标签中打开该网址。我正在使用CommandButton的action属性,它正确设置URL值,但如何在新选项卡中将该URL打开为pdf。即“pdf的URL应在新标签中打开”

  3. 代码示例如下:

    <div class="form-options">
        <h:commandButton value="Download Report" styleClass="btn btn-primary btn-icon buttonCustom" actionListener="#{reportBean.GenerateReport}">
        </h:commandButton>
    </div>  
    

3 个答案:

答案 0 :(得分:2)

使用commandLink而不是commandButton .. 使用commandLink时,您需要为target属性提供值作为新窗口。

<h:commandLink target="new window">

根据您的要求休息所有代码。 由于您的报告所在的URL已经存在于其中一个变量中,您可以使用commandLink中的bean来提供该URL的变量。

此外,您也可以使用iframe。它通常用于在同一页面上显示报告...

答案 1 :(得分:2)

希望我理解你是对的。这对我有用:

  1. 提供生成报告的方法和commandButton的actionListener-attribute中的URL(根据您的示例代码,您已经做了什么)。
  2. 提供在commandButton的action-attribute中返回URL的方法(它将在actionListener-method之后调用)。
  3. 要打开新标签页,请在父target="_blank中添加<h:form>(取自this questions answer
  4. XHTML-代码:

    <h:form target="_blank">
        <h:commandButton value="Show Report" 
                         actionListener="#{reportBean.generateReport}"
                         action="#{reportBean.getUrl}" />
    </h:form>
    

    由于此方法将target="_blank"应用于所有非ajax调用,这是使用Javascript的另一种方式:

    <h:form>
        <h:commandButton value="Show Report" 
                         actionListener="#{reportBean.generateReport}"
                         action="#{reportBean.getUrl}" 
                         onclick="this.form.target='_blank'"/>
    </h:form>
    

    Java的代码:

    public void generateReport(final ActionEvent evt) {
        // ... generating report and setting url-variable
    }
    
    
    public String getUrl() {
        return url;
    }
    

    如果您必须转发至外部链接,请参阅this question

答案 2 :(得分:2)

据我所知,您的问题不是将操作结果重定向到新标签,而是要显示报告(如果我的猜测是正确的,您使用的是JasperReport,并希望以PDF格式显示格式)。为此,您必须将文件下载到客户端计算机,然后让客户端上的默认编辑器/程序处理该文件。

我不会详细介绍文件下载,BalusC提供了有关此问题的详细信息:

在浏览器中显示PDF(或任何其他)文件的相关部分是响应的ContentType。这将告诉浏览器文件必须如何受到威胁。一些内容类型值

  • PDF:application / pdf
  • Excel:application / vnd.ms-excel
  • Microsoft Word:application / ms-word
  • 更多:Internet media type

如果我错了并且您不想显示(下载)该文件并需要在新窗口中打开该文件,您有两种方法(恢复@JanisK。和@AngelsandDemons答案):< / p>

  • 将表单的目标设置为“_ blank”,但这样做 all 执行的操作将打开一个新的选项卡/窗口。

    <h:form target="_blank">
        <h:commandButton ... />
    </h:form>
    
  • 使用commandLink而不是commandButton,您可以在其中为此链接请求设置目标。

    <h:form>
        <h:commandLink target="_blank" ... />
    </h:form>