我正在使用JSF 2.0,Primefaces 3.4.2,Spring 3.1.2。
我正面临着这个链接的类似问题: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配有@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>
答案 0 :(得分:1)
春天的范围“视图”不存在......所以你创造了自己的,对吗?只是为了检查...... 我曾经遇到过这样的问题,我认为这与验证有关... immediate = true属性解决了我的问题。
答案 1 :(得分:0)
这与页面范围有关。您的问题是由于页面的部分呈现。最初,当您加载页面时,它没有完全加载,因此当您尝试第一次单击该按钮时,该按钮不是该特定视图的一部分。在显示页面
之前,尝试让您从支持bean中正确显示或显式呈现页面