Я запускаю веб-приложение JSF2 с помощью PrimeFaces 3.5 на GlassFish 3.1.2. Я хочу реализовать функцию импорта CSV, чтобы значения чтения были заполнены компонентами без перезагрузки страницы.Содержимое ui: repeat не обновляется с помощью p: fileUpload
Технически после загрузки файла <p:fileUpload>
я хочу обновить компонент, который создает поля ввода итеративно с помощью <ui:repeat>
. Вот упрощенный код моего зрения:
<ui:define name="content">
<h:form id="form" prependId="false" enctype="multipart/form-data">
<p:growl id="growl" showDetail="true" life="5000" />
<p:panel header="Values">
<h:panelGroup id="grid" layout="block">
<p:commandButton actionListener="#{table.handlePost}"
id="postTop" value="Save" update="growl" />
<p:commandButton id="dlTop" value="Export CSV" ajax="false"
onclick="PrimeFaces.monitorDownload(start, stop)"
icon="ui-icon-arrowthichk-s">
<p:fileDownload value="#{table.csv}" />
</p:commandButton>
<p:fileUpload fileUploadListener="#{table.handleFileUpload}"
mode="advanced" update="tableView, growl" sizeLimit="10000"
allowTypes="/(\.|\/)(csv)$/" label="Import CSV"
showButtons="false" />
<h:panelGroup id="tableView" layout="block">
<table>
<tr>
<th>Day</th>
<th>Value</th>
</tr>
<ui:repeat value="#{table.values}" varStatus="val" id="table">
<tr>
<td><h:outputText
value="#{table.date}-#{val.index+1}" /></td>
<td><h:inputText id="value"
value="#{table.values[val.index]}"
converter="javax.faces.Double" /></td>
</tr>
</ui:repeat>
</table>
</h:panelGroup>
<p:commandButton actionListener="#{table.handlePost}"
id="postBottom" value="Save" update="growl" />
<p:commandButton id="dlBottom" value="Export CSV" ajax="false"
onclick="PrimeFaces.monitorDownload(start, stop)"
icon="ui-icon-arrowthic hk-s">
<p:fileDownload value="#{table.csv}" />
</p:commandButton>
</h:panelGroup>
</p:panel>
</h:form>
</ui:define>
table
боб:
@ViewScoped
@ManagedBean(name="table")
public class TableView { }
значения считываются правильно, я могу обновить любой компонент для вывода table.values
, за исключением <p:fileUpload>
, содержание <ui:repeat>
никогда обновлено. Если я обновляю tableView
из любого другого компонента, кроме <p:fileUpload>
, содержимое <ui:repeat>
будет обновлено правильно. В чем может быть проблема?
Параметр 'update' атрибут указана в официальной документации PrimeFaces. В представленном примере, компонент 'growl' успешно обновляется. –
Выполняется ли обновление, если вы используете update = "@ form"? – zargarf
Нет, к сожалению, это дает то же поведение. Я также попытался поставить '' inside ' ' and do 'update =": form: tableView,: form: growl "'. Но это также приводит к тому же. –