4

我正在使用 JSF 2.0、Primefaces 3.4.2、Spring 3.1.2。

我面临这个链接的人的类似问题:h:commandButton 从第二次单击开始工作

像他一样,我没有在中使用 ajax,<p:commandButton>但我<p:fileDownload />在按钮标签内使用。

我有两个视图:“list.xhtml”和“downloadView.xhtml”。在myBean.java我从视图“list.xhtml”发送一个 DataModel 以查看“downloadView.xhtml”作为请求属性,如下面的代码所示:

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

豆子是用@Scope("view")

在视图“downloadView.xhtml”中,我成功填充了一个数据表,其中包含从请求发送的 DataModel。但是当我单击按钮下载文件时,就会出现问题。它仅在第二次尝试时有效。我已经尝试将我的方法的返回从 null 更改为“downloadView”,但问题没有解决。

在调试模式下,我注意到仅在第二次单击时输入“downloadMethod()”。

任何人都有解决它的想法?


myBean.java

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

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

    return "downloadView";
}

下载View.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

spring 的范围“视图”不存在......所以你创建了自己的,对吧?只是为了检查...我曾经遇到过这种问题,我认为这与验证有关... immediate=true 属性解决了我的问题。

于 2012-12-25T11:13:39.127 回答
0

这与页面的范围有关。您的问题是由于页面的部分呈现。最初,当您加载页面时,它并没有完全加载,因此当您第一次尝试单击该按钮时,该按钮不是该特定视图的一部分。尝试让您在显示页面之前查看正确或显式地从支持 bean 呈现页面

于 2013-02-21T07:04:32.013 回答