我必须在点击按钮时执行两项操作。
调用bean中的一个方法,该方法将返回一个url,并将在某个变量中设置。
之后我必须在另一个标签中打开该网址。我正在使用CommandButton的action属性,它正确设置URL值,但如何在新选项卡中将该URL打开为pdf。即“pdf的URL应在新标签中打开”
代码示例如下:
<div class="form-options">
<h:commandButton value="Download Report" styleClass="btn btn-primary btn-icon buttonCustom" actionListener="#{reportBean.GenerateReport}">
</h:commandButton>
</div>
答案 0 :(得分:2)
使用commandLink而不是commandButton .. 使用commandLink时,您需要为target属性提供值作为新窗口。
<h:commandLink target="new window">
根据您的要求休息所有代码。 由于您的报告所在的URL已经存在于其中一个变量中,您可以使用commandLink中的bean来提供该URL的变量。
此外,您也可以使用iframe。它通常用于在同一页面上显示报告...
答案 1 :(得分:2)
希望我理解你是对的。这对我有用:
target="_blank
中添加<h:form>
(取自this questions answer)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。这将告诉浏览器文件必须如何受到威胁。一些内容类型值
如果我错了并且您不想显示(下载)该文件并需要在新窗口中打开该文件,您有两种方法(恢复@JanisK。和@AngelsandDemons答案):< / p>
将表单的目标设置为“_ blank”,但这样做 all 执行的操作将打开一个新的选项卡/窗口。
<h:form target="_blank">
<h:commandButton ... />
</h:form>
使用commandLink而不是commandButton,您可以在其中为此链接请求设置目标。
<h:form>
<h:commandLink target="_blank" ... />
</h:form>