0

GlassFish 3.1.2 で PrimeFaces 3.5 を使用して JSF2 Web アプリケーションを実行しています。ページをリロードせずに読み取った値がコンポーネントに入力されるように、CSV インポート機能を実装したいと考えています。

技術的には、 でファイルをアップロードした後<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値は正しく読み取られます。コンポーネントを outputに更新できますが<p:fileUpload>、 の内容は<ui:repeat>更新されません。tableView以外のコンポーネントから更新する<p:fileUpload>と、 の内容は<ui:repeat>正しく更新されます。何が問題なのですか?

4

1 に答える 1

0

ファイル アップロード コンポーネントが ajax 更新タグをサポートしているとは思わないため、ページ全体を更新する必要があるかもしれません...次を使用して JavaScript でこれを行うことができます。oncomplete="javascript:window.location.reload(true)"

于 2013-06-07T08:55:03.367 に答える