4

Excelシートの生成中にエラーが発生したときに、リクエストをエラーページに転送しようとしています。以下にサンプルコードを示します。例外がスローされたときにエラー ページに転送されない理由がわかりません。空白のページが表示されますが、エラー ページには確実に移動しません。

        @ResourceMapping("xyz")
    public void generateExcelExport(ResourceRequest request, ResourceResponse response)  {
        try {
            //Do all the excel related logic
            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            response.setProperty("Content-Disposition", "attachment; filename=\"" + XYZ + "\"");
            workbook.write(response.getPortletOutputStream());
        } catch (Exception e) {
            response.setProperty("Content-Disposition", "inline" );
            response.setContentType("text/html");
            PortletRequestDispatcher dispatcher = request.getPortletSession().getPortletContext().getRequestDispatcher("/WEB-INF/views/html/jsp/error.jsp");
            try {
                dispatcher.forward(request, response);              
            } catch (Exception e1) {                
                log.error("Unable to forward the request from the portlet", e1);
            } 
        } }
4

4 に答える 4

0

同様の問題がありました。これは機能します-

PortletURL renderUrl = resourceResponse.createRenderURL();  
renderUrl.setParameter("renderException", ex.toString());   
resourceResponse.addProperty("Location", renderUrl.toString());
于 2014-01-16T05:47:33.777 に答える
0

これがresourcePhaseで機能するかどうかは100%確信が持てませんが、試すことができます

com.liferay.portal.kernel.servlet.SessionErrors.add(request, "your Error message here");
于 2013-07-30T12:15:00.240 に答える
0

よくわかりませんが、エラーページにリダイレクトするときにレンダリングパラメーターを設定しなかったと思います。

これを試して、何らかの形で役立つかどうかを確認してください (ディスパッチャーの行の代わりに配置できます):

response.setRenderParameter("jspPage", "/WEB-INF/views/html/jsp/error.jsp");

私はactionResponseでこの種のリダイレクトを使用していますが、 resourceResponseでも動作するはずです...

編集: リソース応答には setRenderParameter メソッドが含まれていませんが、次のアプローチを試すことができます。

を使用して renderURL を作成しresponse.createRenderURL()ます。この URL を使用してリクエストがトリガーされると、レンダリング リクエスト/レスポンス (またはそのメソッドにアクセスできるアクション リクエスト) になります。

問題は、ポートレットのリソース フェーズ中に別のページにリダイレクトしようとしていることです (このフェーズではレンダリング フェーズが呼び出されません)。

于 2013-07-26T08:05:53.077 に答える
0

何かを書いたために応答がすでにコミットされているため、転送されていない可能性があります。これは、 include が機能し、 forward が機能しない理由を説明できます。

catch ブロックで resourceResponse.isCommitted() を使用して、応答が既にコミットされているかどうかを確認できます。

于 2014-03-27T12:19:26.023 に答える