1
リストを表示するのに<ui:repeat>
を使用しています。今度は、リスト全体をCSVファイルにエクスポートしたいと思います。 JSF 2.0でこれを行う方法はありますか?ui:repeatリストをCSVファイルとしてエクスポート
リストを表示するのに<ui:repeat>
を使用しています。今度は、リスト全体をCSVファイルにエクスポートしたいと思います。 JSF 2.0でこれを行う方法はありますか?ui:repeatリストをCSVファイルとしてエクスポート
はい、方法があります。 「エクスポート」と表示されるコマンドボタンを追加します。
<h:form>
<h:commandButton value="export" action="#{bean.export}" />
</h:form>
その後、export()
方法では、あなたが<ui:repeat>
や印刷にそこに有効なCSV形式でそれぞれの行/列を表示していList<Something>
を反復処理します。 CSV形式のルールは非常に単純で、3つしかありません。
だから、このようなものを見てみましょう:
public void export() throws IOException {
FacesContext fc = FacesContext.getCurrentInstance();
ExternalContext ec = fc.getExternalContext();
String filename = "somename.csv";
ec.responseReset();
ec.setResponseContentType("text/csv");
ec.setResponseHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");
Writer writer = ec.getResponseOutputWriter();
for (Something something : somethings) { // somethings is your List<Something>
writer.append(toCsvField(something.getFoo()))
.append(',')
.append(toCsvField(something.getBar()))
.append(',');
.append(toCsvField(something.getBaz()))
.append('\n');
}
fc.responseComplete(); // Important! Otherwise JSF will perform navigation.
}
public static String toCsvField(Object value) {
if (value == null) {
return "";
}
String field = String.valueOf(value).replace("\"", "\"\"");
if (field.indexOf(',') > -1 || field.indexOf('"') > -1) {
field = '"' + field + '"';
}
return field;
}
はあなたに非常に多くのBalusCをありがとう – user1166528