2012-12-14 98 views
4

我使用的是JSF 2.0,Primefaces 3.4.2,Spring 3.1.2。p:commandButton與p:fileDownload和沒有ajax只能在第二次點擊

我正面臨類似的問題,這個鏈接的傢伙:h:commandButton works from the second click

像他一樣,我沒有在<p:commandButton>中使用ajax,但我在按鈕標籤中使用了<p:fileDownload />

我有兩個意見:「list.xhtml」和「downloadView.xhtml」。在myBean.java我發送從視圖「list.xhtml」一個的DataModel查看「downloadView.xhtml」作爲請求屬性作爲顯示在下面的代碼:

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

的bean被anotted與@Scope("view")

鑑於「downloadView.xhtml」我用請求發送的DataModel成功填充dataTable。但是當我點擊按鈕下載文件時,問題就發生了。它只能在第二次嘗試。 我已經試圖將我的方法從null更改爲「downloadView」,但問題沒有解決。

在調試模式下,我注意到只有在第二次點擊時才進入「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> 
+1

但問題症狀表明您正在通過ajax進行導航。這是真的?要排除一個和其他,請嘗試'返回「downloadView?faces-redirect = true」;'。順便說一句,servlet上下文不代表請求範圍,而是應用程序範圍。因此,您可以有效地爲** all **應用程序用戶設置/覆蓋數據!這不是你具體問題的原因,但我強烈建議修復並將其限制在最多會話範圍內,否則在生產過程中會遇到重大問題。 – BalusC

+0

它也可能是由於第一個請求(當頁面被加載時)和第二個請求(當你點擊按鈕時)之間的'myDataModelFromRequest'變化引起的。不確定階段的名稱,但它不喜歡什麼時候對象在某個時刻改變並停止。 我想@BalusC知道周圍的細節。 (請記住閱讀關於它的帖子) – grekier

回答

1

春範圍 「視圖」 doesn't存在......所以,你創建你自己的,對?只是爲了檢查... 我曾經有過這樣的問題,我認爲這與驗證有關...... immediate = true屬性解決了我的問題。

+0

是的,我創建了自己的「ViewScoped」:) Thx – romeromedeiros

0

這與頁面範圍有關。您的問題是由於部分呈現網頁。最初,當您加載頁面時,它並未完全加載,因此當您嘗試首次單擊該按鈕時,該按鈕不是該特定視圖的一部分。在顯示頁面之前嘗試讓您查看正確或明確呈現支持bean的頁面

相關問題