答案 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过滤器。设置属性。但是,我没有尝试过这个。