レポートジェネレータの一種であるJSF1.2ビューがあります。ユーザーはクエリを選択し、いくつかの値を構成すると、データベースが要求され、データが収集されます。その後、データはdataTableで表示でき、最終的にExcelにエクスポートされます。これまでのところ正常に動作します。
クエリに応じて、列にはさまざまなタイプがあり、そのうちの1つはDoubleです。Doubleの値は今すぐ丸められるはずです...
多くの行(数万または数十万)があるため、時間のかかる型変換を避けるために、すべてのデータを文字列として収集します。Excelにエクスポートするには、文字列も必要なので(Office XMLに書き込まれる)、これはかなり問題ありません。
しかし、ここで丸めが行われます。dataTableでは、doubleは丸められます。Doubleがあれば、f:convertNumberを簡単に使用できますが、持っていません。
私のアイデアは、それが数値であるかどうかを分析し、文字列をフォーマットする文字列コンバーターです。(ページングされたdataTableには30程度のレコードしかないため、パフォーマンスはそれほど重要ではありません)。どうすればこれを達成できますか?
(他の)提案はありますか?ありがとう!
マーク
編集:
今のところ解決
public class ReportStringConverter implements Converter {
DecimalFormat f = new DecimalFormat("#0.00");
public Object getAsObject(FacesContext context, UIComponent component, String value) {
return value;
}
public String getAsString(FacesContext context, UIComponent component, Object value) {
if (isNumeric(value.toString())) {
return f.format(Double.parseDouble(value.toString()));
} else {
return value.toString();
}
}
private boolean isNumeric(String s) {
try {
double d = Double.parseDouble(s);
} catch (NumberFormatException e) {
return false;
}
return true;
}
}