commandLink里面的数据表重定向到servlet只能在第一次点击时工作

时间:2014-06-19 17:50:53

标签: jsf primefaces

我正在使用PrimeFace 4.0。有一个数据表列出了登录用户的一些文档。当用户单击一行数据表时,它将打开一个新页面并显示该文档的PDF内容。它适用于第一次点击,在第一次单击同一原始页面(列出文档)后,点击任何元素将打开一个新窗口,但它会导航到主页。
数据表看起来像这样:

<p:dataTable id="tableLicenseeDocuments" value="#{pc_LicenseeDocumentsBean.documentList}" var="document">                       

<p:column sortBy="documentName" headerText="#{bundle['header.name']}"  >
    <h:commandLink value="#{document.documentName}"  action="#{documentsBean.viewFile(document)}" ajax="false" target="_blank"/>
</p:column>

</p:dataTable>

DocumentBean在会话范围内,动作viewFile如下所示:

public void viewFile(DocumentDto document)  {
    FacesContext faceContext = FacesContext.getCurrentInstance();
    ExternalContext extContext = faceContext.getExternalContext();
    PortletRequest portletRequest = (PortletRequest) extContext.getRequest();
    PortletSession pSession = portletRequest.getPortletSession(true);
    pSession.setAttribute("document", document , PortletSession.APPLICATION_SCOPE);
    String baseUrl = extContext.getRequestContextPath();
    String url = baseUrl + "/DisplayPDFServlet";
    try {
        String encodeURL = extContext.encodeRedirectURL(url, null);
        extContext.redirect(encodeURL);
    } catch (Exception e) {
         // Handle the exception here ...
    } finally {
         faceContext.responseComplete();
    }

页面包含用户点击侧边菜单加载的数据表,也是commandLink,返回bean加载数据,然后显示,显示页面的生命周期是:(请注意第5阶段后,那里是一个额外的阶段1 RESOTRE_VIEW,为什么这里有一个额外的RESOTRE_VIEW阶段,视图是否已经恢复?)

  
    

1.START PHASE RESTORE_VIEW(1)

         

2.END PHASE RESTORE_VIEW(1)

         

3.START PHASE APPLY_REQUEST_VALUES(2)

         

4.END阶段APPLY_REQUEST_VALUES(2)

         

5.START PHASE PROCESS_VALIDATIONS(3)

         

6.END阶段PROCESS_VALIDATIONS(3)

         

7.START PHASE UPDATE_MODEL_VALUES(4)

         

8.END PHASE UPDATE_MODEL_VALUES(4)

         

9.START PHASE INVOKE_APPLICATION(5)

         

10.END PHASE INVOKE_APPLICATION(5)

         

11.START PHASE RESTORE_VIEW(1)

         

12.END PHASE RESTORE_VIEW(1)

         

13.START PHASE RENDER_RESPONSE(6)

         

14.END PHASE RENDER_RESPONSE(6)

  

当用户第一次点击数据表的行,打开一个新窗口并显示内容时,生命周期如下:

  
    

1.START PHASE RESTORE_VIEW(1)

         

2.END PHASE RESTORE_VIEW(1)

         

3.START PHASE APPLY_REQUEST_VALUES(2)

         

4.END阶段APPLY_REQUEST_VALUES(2)

         

5.START PHASE PROCESS_VALIDATIONS(3)

         

6.END阶段PROCESS_VALIDATIONS(3)

         

7.START PHASE UPDATE_MODEL_VALUES(4)

         

8.END PHASE UPDATE_MODEL_VALUES(4)

         

9.START PHASE INVOKE_APPLICATION(5)

         

10.END PHASE INVOKE_APPLICATION(5)

  

在同一页面上有数据表,当用户第二次点击该行时,它实际上转到主页:

  
    

1.START PHASE RESTORE_VIEW(1)

         

2.END PHASE RESTORE_VIEW(1)

         

3.START PHASE RENDER_RESPONSE(6)

         

4.END阶段RENDER_RESPONSE(6)

  

它实际上是一个Portlet,但我认为这个问题与JSF有关。我几天都在为此奋斗,任何建议都会非常感激!

0 个答案:

没有答案