2012-08-22 20 views
1

我有一个简单的JSR 286 portlet,显示用户手册(纯HTML代码,而不是JSP)。在doView上编辑响应内容()

其实,我doView方法,只是包含此:

public class UserManualPortlet extends GenericPortlet 
{ 

    @Override 
    protected void doView(RenderRequest request, RenderResponse response) 
      throws PortletException, IOException 
    { 
     PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(
       "/html/usermanual.html"); 

     rd.include(request, response);  
    } 
} 

可正常工作,但包括图像,当我遇到麻烦。我知道,路径图像应该是这样的:

<img src='<%=renderResponse.encodeURL(renderRequest.getContextPath() + "/html/image.jpg")%>'/> 

然而,包含用户手册我的HTML文件在其他地方使用,所以我想保存它作为一个纯HTML文件。

有没有办法动态取代我的经典images urls通过类似上面的例子吗?也许使用PrintWriter的回应?

如果这样的事情是不可能的,我需要在我的Maven构建过程中生成一个JSP文件。

欢迎任何解决方案或想法。

回答

0

随着JSR-268的portlet必须引用资源的一种更好的方法:使用renderResponse.createResourceURL()创建ResourceURL,然后你在ResourceURL设置resourceID。这应该会在所有Portlet容器中产生更一致的结果。

也就是说,如果你想修改你的usermanual.html生成的内容,但你不想将它转换成JSP,那么,我不会使用请求调度器,而是自己加载文件内容,解析同时我会进行URL替换,然后将所有内容打印到Portlet的响应中。

+0

不错,但你是什么意思*自己加载*? –

+1

使用'PortletContext.getRealPath(“/ html/usermanual.html”)'知道文件的确切位置,然后创建一个'BufferedReader'来加载内容,解析和替换,然后将结果写入到portlet的输出流或作家。 –