如何通过Bean方法调用链接,在PrimeFaces按钮实现XML下载?
正确配置PrimeFaces按钮调用Bean方法实现XML下载
当前代码的问题
<p:button>的href属性无法直接触发JSF Bean的方法调用(它仅用于渲染静态或EL绑定的链接地址,不会执行带括号的方法)- 你的Bean方法仅设置了
Link变量,但没有触发实际的下载逻辑,也没有让页面跳转到该链接
方案一:使用PrimeFaces文件下载组件(推荐)
这种方式无需依赖外部下载链接,直接在Bean中生成文件流,是JSF/PrimeFaces的标准实现方式。
修改Bean代码
引入PrimeFaces的StreamedContent相关类,将方法改为返回文件流:
import org.primefaces.model.StreamedContent; import org.primefaces.model.DefaultStreamedContent; import javax.faces.context.FacesContext; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; public StreamedContent downloadXML() throws YDSException, FileNotFoundException, IOException { // 读取XML文件的输入流,路径根据你的实际文件位置调整 InputStream xmlStream = FacesContext.getCurrentInstance() .getExternalContext() .getResourceAsStream("/download/DEMODATA.xml"); return DefaultStreamedContent.builder() .name("DEMODATA.xml") // 下载后显示的文件名 .contentType("application/xml") // 文件MIME类型 .stream(() -> xmlStream) // 提供文件流 .build(); }
修改XHTML按钮代码
用<p:commandButton>配合<p:fileDownload>组件,触发Bean方法并下载文件:
<p:commandButton value="Download XML File" id="btnGenXML" icon="fa fa-fw fa-download" title="Download Generated XML" styleClass="ui-priority-primary" disabled="#{dbctoxmlProcessView.disable}"> <p:fileDownload value="#{dbctoxmlProcessView.downloadXML()}" /> </p:commandButton>
方案二:跳转至外部下载链接
如果必须使用你原有的外部下载链接,需要先通过Bean方法设置链接地址,再让按钮跳转。
修改Bean代码
添加一个可访问的链接属性和准备链接的方法:
private String downloadLink; public String getDownloadLink() { return downloadLink; } public void prepareDownloadLink() throws YDSException, FileNotFoundException, IOException { downloadLink = "http://localhost:8080/uberConsole/download?file=DEMODATA.xml"; }
修改XHTML按钮代码
通过action属性先执行Bean方法设置链接,再用href绑定该链接:
<p:button href="#{dbctoxmlProcessView.downloadLink}" disabled="#{dbctoxmlProcessView.disable}" value="Download XML File" id="btnGenXML" icon="fa fa-fw fa-download" title="Download Generated XML" styleClass="ui-priority-primary" action="#{dbctoxmlProcessView.prepareDownloadLink()}"/>
内容的提问来源于stack exchange,提问作者A.R. Faustine Tangente
相关产品推荐
相关产品推荐

