2012-12-14 44 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的页面

相关问题