gpt4 book ai didi

csv - 如何使用 h :outputLink without controller bean 下载文件

转载 作者:行者123 更新时间:2023-12-04 02:18:16 29 4
gpt4 key购买 nike

我需要下载一个 CSV 文件,但我不想使用 bean。可以吗?

<h:outputLink id="download" value="#{request.contextPath}/resources/file/download.csv">
<h:outputText value="download" />
</h:outputLink>

在 Firefox 中运行良好,在 chrome 和 IE 中显示纯文本,我需要一个窗口下载对话框。

感谢您的宝贵时间。

最佳答案

这取决于关于带有 csv 的文件的浏览器配置扩展和 Content-Type HTTP 响应中的 header 。这通常默认为 text/csv (您可以在浏览器的 HTTP 流量监视器中找出它,您可以通过在浏览器中按 F12 并打开“网络”选项卡来获得它)。大多数浏览器默认显示 text/*内联内容。但是最终用户可以操纵默认的浏览器行为,通常是在第一次下载时,当浏览器询问如何处理文件时,然后它会被记住以备将来使用。这超出了服务器(您的)的控制范围。

您可以操纵 Content-Type 的默认值带有 csv 的文件头通过 <mime-mapping> 扩展在 webapp 的 web.xml如下所示:

<mime-mapping>
<extension>csv</extension>
<mime-type>application/csv</mime-type>
</mime-mapping>

大多数浏览器会关联application/*内容作为附件,或者已经具有关联的默认应用程序,例如Excel,否则将询问最终用户如何处理它。结果也不在服务器的控制范围内。

您可以通过新的 HTML5 强制另存为对话框download <a> 的属性元素,其中您(重新)指定唯一的文件名,如下所示:

<a href="#{request.contextPath}/resources/file/download.csv"
download="download.csv">download</a>

请注意,您可以在 JSF 中完美地嵌入纯 HTML,而且您也不需要 <h:outputText>在静态文本的所有地方。另见 Is it suggested to use h:outputText for everything?

或者,如果您已经在使用 JSF 2.2,它支持 passthrough attributes , 而你坚持使用 <h:outputLink>对于不支持 download 的工作属性,那么你可以这样做:

<... xmlns:a="http://xmlns.jcp.org/jsf/passthrough">
...
<h:outputLink value="#{request.contextPath}/resources/file/download.csv"
a:download="download.csv">download</h:outputLink>

另见 Custom HTML tag attributes are not rendered by JSF .

关于csv - 如何使用 h :outputLink without controller bean 下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32745480/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com