我想寫一個控制器,生成一個CSV電子表格保存爲一個文件。setContentType門戶網站控制器失敗
我寫了下面的動作和渲染方法
/**
* Get the stats for the search.
*/
@ActionMapping(params={"controller=exportView","action=csv"})
public void viewInstance(ActionRequest request, ActionResponse response){
response.setRenderParameter("controller", "exportView");
response.setRenderParameter("action","csv");
}
@RenderMapping(params={"controller=exportView","action=csv"})
public String viewInstance(@RequestParam(value = "id", required = true) final String viewInstanceId, RenderRequest request, RenderResponse response, Model model) throws Exception {
ApplicationContext ctx = ThreadApplicationContextHolder.getApplicationContext();
.. do some stuff
String filename = getFilename();
response.setContentType("text/csv"); // go bang here
response.addProperty(ExportViewInstanceAsCsvFileController.HEADER_CONTENT_DISPOSITION, "attachment;filename=" + filename + ExportViewInstanceAsCsvFileController.FILE_EXT);
viewInstanceFileRenderer.renderSearchResultNodesToFile(getData(), response.getPortletOutputStream());
return "portlet/exportView";
}
當它運行在服務器抱怨的內容類型不是「text/html的」, 所以我修改portlet.xml中有
<supports>
<mime-type>text/html</mime-type>
<portlet-mode>VIEW</portlet-mode>
</supports>
<supports>
<mime-type>text/csv</mime-type>
<portlet-mode>VIEW</portlet-mode>
</supports>
但websphere似乎忽略了這一點。
當我調試並運行request.getResponseContentTypes()
它只在集合中有text/html
。應用程序結構有一個portlet來處理登錄,然後有三個web應用程序來處理應用程序的各個方面。我在處理電子表格生成的web應用程序中修改了 portlet,但未在登錄portlet中修改該portlet。
我的下一步是更改(登錄portlet.xml),但我不確定它會工作。
我還能看到其他地方嗎?