JSPG0036E:无法在Websphere中找到Liferay 4.3 + Spring Portlet的资源/ WEB-INF / servlet /视图错误

时间:2010-08-13 09:47:09

标签: websphere

2 个答案:

答案 0 :(得分:1)

找到解决办法:): -

扩展Spring DispatcherPortlet类并编写自己的自定义portlet类。

重写render方法,大部分实现与基类render方法实现相同。

在方法的末尾添加这些行 -

HttpServletRequest httpRequest = PortalUtil.getHttpServletRequest(request);
HttpServletResponse httpResponse = PortalUtil.getHttpServletResponse(response);
//constant below indicate the url pattern of view renderer servlet configured in web.xml
RequestDispatcher portletRequestDispatcher = httpRequest.getRequestDispatcher("/WEB-INF/servlet/view");

portletRequestDispatcher.include(httpRequest, httpResponse);

注意:不要忘记在portlet.xml中为portlet配置自定义portlet类。

希望它对你也有用。

答案 1 :(得分:0)

当进行servlet转发调用而不是servlet include时,在新版本中也会出现此错误。

我在WebSphere 8.5上使用Apache Tiles 2和Spring Portlet MVC 4.3观察到了这一点。在这种情况下 - 如果您使用的是Spring的viewResolver bean,您可以将其配置为强制使用servlet-include:

<bean id="viewResolver" class="org.springframework.web.servlet.view.tiles2.TilesViewResolver">
    <property name="alwaysInclude" value="true" />
</bean>

请注意,Spring MVC 4.3中不推荐使用Tiles 2支持。我刚刚添加了此解决方案,以防有人遇到现有代码问题。

关于Tiles,另一种方法是手动强制servlet-include。您需要将请求属性ServletUtil.FORCE_INCLUDE_ATTRIBUTE_NAME设置为true。但是,如果您在portlet请求中设置它,我不知道这是否有效,因为servlet请求中的portlet请求属性可能不再可用。据我所知,没有官方的方法从portlet请求对象获取servlet请求对象。因此,here有人建议为&#34; *。tiles&#34;创建一个servlet过滤器。设置属性。但是,我没有尝试过这个。