在Firefox上使用PrimeFaces的阿拉伯名称导出文件

时间:2017-11-19 06:59:54

标签: jsf primefaces download arabic

我们一直面临一个问题,即从PrimeFaces导出的具有预期阿拉伯名称的文件具有空白(作为名称)而不是文本,后跟扩展名,如"的.csv&#34 ;.文件的内容以阿拉伯语显示。我们有Apache-Tomcat 6.0.29服务器。我调试并发现该文件的名称是阿拉伯语,直到return语句(下面给出的Java代码),但之后无法调试。尝试在这里接受的答案Primefaces fileDownload non-english file names corrupt中给出的解决方案,但它对我没用,因为我使用的是Firefox。我们已经在 server.xml 中的连接器标记中设置了 URIEncoding =" UTF-8" 的属性。

XHTML:

<p:commandLink id="export" ajax="false" > Export
<p:fileDownload value="#{groupView.export}"/>
</p:commandLink>

爪哇:

 public StreamedContent getExport() {

    String content = "Any text in Arabic or English";

    // send CSV file to browser
    InputStream is;
    StreamedContent file = null;
    try {
        is = new ByteArrayInputStream(content.getBytes("UTF-8"));
        file = new DefaultStreamedContent(is, "application/csv", "المشاركات.csv","UTF-8");
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }

    return file; //FILE NAME IS IN ARABIC TILL HERE
    }

PS:我尝试通过普通的Java创建具有阿拉伯名称的文件,但它确实有效。

1 个答案:

答案 0 :(得分:0)

我分享的帖子中接受的答案适用于大多数浏览器,但Firefox。为了解决这个问题,我在contentDisposition标记中使用了p:fileDownload属性。这种语法有点奇怪,但它的工作原理。星号和单引号是其中的一部分。

<p:fileDownload value="#{groupView.export}" contentDisposition="inline; filename*=utf-8''%D8%A7%D9%84%D9%85%D8%B4%D8%A7%D8%B1%D9%83%D8%A7%D8%AA.csv"/>

在正常情况下,这个编码文本将从bean传递,但为了清楚起见我已添加。