2013-06-07 6 views
0

Я запускаю веб-приложение 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> будет обновлено правильно. В чем может быть проблема?

ответ

0

Я не думаю, что компонент загрузки файлов поддерживает AJAX тег обновления, так что вы, возможно, придется сделать полное обновление страницы ... вы могли бы сделать это в JavaScript с помощью: oncomplete="javascript:window.location.reload(true)"

+0

Параметр 'update' атрибут указана в официальной документации PrimeFaces. В представленном примере, компонент 'growl' успешно обновляется. –

+0

Выполняется ли обновление, если вы используете update = "@ form"? – zargarf

+0

Нет, к сожалению, это дает то же поведение. Я также попытался поставить '' inside '' and do 'update =": form: tableView,: form: growl "'. Но это также приводит к тому же. –

Смежные вопросы