我使用的是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>
但問題症狀表明您正在通過ajax進行導航。這是真的?要排除一個和其他,請嘗試'返回「downloadView?faces-redirect = true」;'。順便說一句,servlet上下文不代表請求範圍,而是應用程序範圍。因此,您可以有效地爲** all **應用程序用戶設置/覆蓋數據!這不是你具體問題的原因,但我強烈建議修復並將其限制在最多會話範圍內,否則在生產過程中會遇到重大問題。 – BalusC
它也可能是由於第一個請求(當頁面被加載時)和第二個請求(當你點擊按鈕時)之間的'myDataModelFromRequest'變化引起的。不確定階段的名稱,但它不喜歡什麼時候對象在某個時刻改變並停止。 我想@BalusC知道周圍的細節。 (請記住閱讀關於它的帖子) – grekier