JSF ページの列のすべての値 (たとえば Excel から) を入力してマネージド Bean に送信できる可能性があるかどうかを知りたいです。これは、マネージド Bean のリストの値を取得することを意味します。
この図は、私が何を意味するかを理解できるように設計されています。
どうすればそれができるか考えていますか?
JSF ページの列のすべての値 (たとえば Excel から) を入力してマネージド Bean に送信できる可能性があるかどうかを知りたいです。これは、マネージド Bean のリストの値を取得することを意味します。
この図は、私が何を意味するかを理解できるように設計されています。
どうすればそれができるか考えていますか?
はい、可能性があります。必要な手順は次のとおりです。
<p:fileUpload>
コンポーネントなどを使用して、Excel ファイルをアップロードします。
<h:form enctype="multipart/form-data">
<p:fileUpload value="#{bean.file}" mode="simple"/>
<p:commandButton value="Submit" ajax="false" action="#{bean.upload}"/>
</h:form>
と
public class Bean {
private UploadedFile file;//getter + setter
private List<String> data;//placeholder
public void upload() {
if(file != null) {
extractData(file.getInputstream);
}
}
}
extractData
たとえば、Apache POIライブラリを使用して、メソッドでファイルの内容を読み取ります。
private void extractData(InputStream is) {
HSSFWorkbook workbook = new HSSFWorkbook(is);
HSSFSheet sheet = workbook.getSheetAt(0);
List<String> data = new ArrayList<String>();
for(Row row : sheet) {
Cell cell = r.getCell(0, Row.RETURN_BLANK_AS_NULL);
if(c != null) {
String content = cell.getStringCellValue();
data.add(String);
}
}
this.data = data;
}
標準の JSF 手段でデータを再表示します。取得したリストを反復コンポーネントにバインドする、ajax 更新するなど。