2017-04-03 87 views
0

目標重定向到多個選項卡

當一個鏈接,用戶點擊,生成3個PDF文件,並使用JSF在3個選項卡中打開它們。

進展到目前爲止

我能夠產生3個PDF文件,但能夠重定向到一個選項卡只

public void printReceipts() { 

     // PDF1 
     // PDF2 
     // PDF3 

     redirectToPage(PDF1_URL); // Works good 

     redirectToPage(PDF2_URL); // Exception - Multiple redirect exceptions 

     redirectToPage(PDF3_URL); 
    } 

.xhtml

<h:commandLink styleClass="btn btn-success" action="#{cartController.printReceipts()}" target="_blank" value="Print" /> 

異常

Apr 03, 2017 7:49:52 PM com.sun.faces.lifecycle.InvokeApplicationPhase execute 
WARNING: #{cartController.printReceipt()}: java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed 
javax.faces.FacesException: #{cartController.printReceipt()}: java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed 
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118) 
    at javax.faces.component.UICommand.broadcast(UICommand.java:315) 
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790) 
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282) 
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:654) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
    at com.boutique.common.filter.AuthFilter.doFilter(AuthFilter.java:73) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:509) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1104) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: javax.faces.el.EvaluationException: java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101) 
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) 
    ... 31 more 
Caused by: java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed 
    at org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:494) 
    at com.sun.faces.context.ExternalContextImpl.redirect(ExternalContextImpl.java:678) 
    at javax.faces.context.ExternalContextWrapper.redirect(ExternalContextWrapper.java:578) 
    at com.boutique.common.controller.AbstractController.redirectToPage(AbstractController.java:408) 
    at com.boutique.controller.CartController.printReceipt(CartController.java:181) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.apache.el.parser.AstValue.invoke(AstValue.java:247) 
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:267) 
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87) 
    ... 32 more 

Apr 03, 2017 7:49:52 PM com.sun.faces.context.ExceptionHandlerImpl throwIt 
INFO: Exception when handling error trying to reset the response. 
javax.faces.el.EvaluationException: java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101) 
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) 
    at javax.faces.component.UICommand.broadcast(UICommand.java:315) 
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790) 
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282) 
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:654) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
    at com.boutique.common.filter.AuthFilter.doFilter(AuthFilter.java:73) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:509) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1104) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed 
    at org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:494) 
    at com.sun.faces.context.ExternalContextImpl.redirect(ExternalContextImpl.java:678) 
    at javax.faces.context.ExternalContextWrapper.redirect(ExternalContextWrapper.java:578) 
    at com.boutique.common.controller.AbstractController.redirectToPage(AbstractController.java:408) 
    at com.boutique.controller.CartController.printReceipt(CartController.java:181) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.apache.el.parser.AstValue.invoke(AstValue.java:247) 
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:267) 
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87) 
    ... 32 more 

javax.servlet.ServletException: java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed 

有什麼解決方法嗎?

+3

將用戶重定向到其具有指向'PDF1PDF2'和嵌入一些JavaScript將打開一次的PDF鏈接的頁面頁面已加載。 – Michael

+0

你不能重定向到多個頁面...你可以讓他們下載,如果你需要... – kondu

+0

這個itext或java-se如何相關? – Kukeltje

回答

0

將PDF內容存儲在支持的屬性中。如果你使用標籤,那麼你只需要一個PDF就可以渲染。在生成頁面時,不要使用三個瀏覽器選項卡,而要使用UITabView組件並訪問Bean存儲的PDF文件名。

管理bean:

@Named 
@SessionScoped 
public class TabbedPDFViewBean 
{ 
    private String[] fileNames = new String[3]; 

    public String getFileName0() { fileNames[0]; } 
    public void setFileName0(String fileName_) { fileName[0] = fileName_; } 
    public String getFileName1() { fileNames[1]; } 
    public void setFileName1(String fileName_) { fileName[1] = fileName_; } 
    public String getFileName2() { fileNames[2]; } 
    public void setFileName2(String fileName_) { fileName[2] = fileName_; } 

} 

的facelet裏:

<p:tabView> 
    <p:tab title="PDF1"> 
    <iframe src="#{tabbedPDFViewBean.fileName0}" width="600" height="400" scrolling="no"></iframe> 
    </p:tab> 
</p:tabView> 
相關問題