ボタンをクリックすると、フォルダー内のファイルのリストを取得しています。フォルダを取得する関数が機能し、テーブルがレンダリングされる前にそれをロードすると、値が適切に表示されます。ただし、値のリストを初期化する関数を呼び出すコマンドボタンを使用してテーブルを作成しようとすると、データテーブルは変更されません。これが私のコードです:
<h:form id="resultform">
<p:dataTable id="resulttable" value="#{ViewBean.resultList}" var="result">
<p:column>
<f:facet name="header">
<h:outputText value="GFEXP_NOM_BDOC" />
</f:facet>
<h:outputText value="#{result.name}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="GFEXP_DATE_MODIF" />
</f:facet>
<h:outputText value="#{result.date}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="GFEXP_PATH" />
</f:facet>
<h:outputText value="#{result.path}" />
</p:column>
<f:facet name="footer">
<p:commandButton value="REFRESH exploitation" action="#{ViewBean.refresh}" update=":resultform:resulttable" ajax="true" />
</f:facet>
</p:dataTable>
</h:form>
バッキング Bean コードは次のとおりです。
@ManagedBean(name = "ViewBean")
@ViewScoped
public class ViewBean implements Serializable {
private static final long serialVersionUID = 9079938138666904422L;
@ManagedProperty(value = "#{LoginBean.database}")
private String database;
@ManagedProperty(value = "#{ConfigBean.envMap}")
private Map<String, String> envMap;
private List<Result> resultList;
public void initialize() {
setResultList(Database.executeSelect(database));
}
public void refresh() {
List<File> fileList = readDirectory();
List<Result> tmpList = new ArrayList<Result>();
for (File f : fileList) {
Result result = new Result(f.getName().substring(0,
f.getName().lastIndexOf(".")), String.valueOf(f
.lastModified()), f.getPath().substring(0,
f.getPath().lastIndexOf("\\") + 1));
tmpList.add(result);
}
setResultList(tmpList);
}
//GETTERS AND SETTERS