4

JSF 2.0、Primefaces 3.4.2、Spring3.1.2を使用しています。

私はこのリンクの人の同様の問題に直面しています:h:commandButtonは2回目のクリックから機能します

彼のように、私はajaxを使用していませんが、ボタンタグの内側<p:commandButton>を使用しています。<p:fileDownload />

「list.xhtml」と「downloadView.xhtml」の2つのビューがあります。以下myBean.javaのコードに示すように、ビュー「list.xhtml」から「downloadView.xhtml」をリクエスト属性として表示するためにDataModelを送信します。

FacesUtil.getServletContext().setAttribute("myDataModelFromRequest", this.myDataModel);

Beanには@Scope("view")

ビュー「downloadView.xhtml」で、リクエストから送信されたDataModelをdataTableに正常に入力しました。しかし、ボタンをクリックしてファイルをダウンロードすると、問題が発生します。2回目の試行でのみ機能します。メソッドの戻り値をnullから「downloadView」に変更しようとしましたが、問題は解決しませんでした。

デバッグモードでは、2回目のクリックで「downloadMethod()」にのみ入力することに気付きました。

誰かがそれを解決するアイデアを持っていますか?


myBean.java

public String viewListMethod() {
    //some work here...

    FacesUtil.getServletContext().setAttribute("myDataModelFromRequest", this.myDataModel);

    return "downloadView";
}

downloadView.xhtml

<h:form id="formId" prependId="false">
    <p:dataTable
        id="dataTableId" var="myVar" value="#{myDataModelFromRequest}"                  
        selection="#{cargaProcessoControlador.myArray}" 
        paginator="true" rows="10" paginatorPosition="bottom" paginatorAlwaysVisible="false">
            <f:facet name="header">  
                    bla bla bla
            </f:facet>

            <p:column selectionMode="multiple" style="width:18px" />

            //collumns here...                      
    </p:dataTable>


    <p:commandButton id="btDownload" ajax="false" value="Download" icon="ui-icon-document" >
        <p:fileDownload value="#{myBean.downloadMethod()}" />
    </p:commandButton>
</h:form>
4

2 に答える 2

1

春のスコープ「ビュー」は存在しません...だからあなたはあなた自身を作成し​​ましたよね?確認するために...私はかつてそのような問題を抱えていました.それは検証に関係していたと思います.immediate = true属性が私の問題を解決しました。

于 2012-12-25T11:13:39.127 に答える
0

これは、ページのスコープと関係があります。問題は、ページの部分的なレンダリングが原因です。最初にページをロードすると、ページは完全にはロードされません。そのため、ボタンを初めてクリックしようとしたときに、ボタンはその特定のビューの一部ではありません。ページを表示する前に、適切に表示するか、バッキングBeanからページを明示的にレンダリングするようにしてください

于 2013-02-21T07:04:32.013 に答える