WebSphere Portal 8.5 - Portlet应用程序- Error.jsp的服务方法抛出的NullPoi



我有一个JSR 168 portlet应用程序,它最初是为WebSphere Portal 6.0开发的,然后以使其工作所需的最小更改转移到WebSphere Portal 7.0,现在我试图将其转移到WebSphere Portal 8.5。

到目前为止,我只在WP 8.5上测试了其中一个portlet,使用WP 7.0版本的应用程序,没有任何更改。它似乎触发了应用程序的Error.jsp,它自己在服务器日志中产生一个NullPointerException。

该应用程序的项目方面包括"JavaServer Faces 1.1"one_answers"JavaServer Faces (IBM Enhanced) 7.0"。

我正在测试的portlet有一个JSP指定为主页,通过应用程序中"portlet.xml"文件中的portlet元素中的这个元素:

<>以前& lt;初始化>& lt;名称> com.ibm.faces.portlet.page.view& lt;价值>/Admin/AdministratorControlView.jsp& lt;/初始化> 之前

当我在浏览器中打开包含此portlet的页面时,预期的内容似乎可以正确呈现,但是内容中的链接没有做任何事情。
每次加载页面都会在服务器上的"SystemOut.log"中产生以下堆栈跟踪,我对其进行了一些截断:

[14/08/15 13:52:27:826 EST] 00000158 ServletWrappe E com.ibm.ws.webcontainer.servlet.ServletWrapper服务CWSRV0068E: servlet的一个服务方法抛出了一个异常[/Error.jsp]在应用[PA_TeamElite]。[java.lang.NullPointerException .com.ibm.ws.portletcontainer.tags.DefineObjectsTag.doStartTag (DefineObjectsTag.java: 62)com.ibm._jsp._Error._jspService (_Error.java: 105)com.ibm.ws.jsp.runtime.HttpJspBase.service (HttpJspBase.java: 99)javax.servlet.http.HttpServlet.service (HttpServlet.java: 668)com.ibm.ws.webcontainer.servlet.ServletWrapper.service (ServletWrapper.java: 1230)com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest (ServletWrapper.java: 779)com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest (ServletWrapper.java: 478)com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest (ServletWrapperImpl.java: 178)...之前

我假设有其他错误触发了error .jsp,但如果是这样,初始错误不会出现在日志文件或浏览器中。
什么可能导致Error.jsp中的NullPointerException,我如何修复它?

我怀疑这是一个配置问题,但是Error.jsp的完整内容在下面,以防有任何帮助。
在Error.jsp中使用的MHFacesPortlet是扩展了com.ibm.faces.portlet.FacesPortlet的自定义类。


<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1" session="false" isErrorPage="true"
    import="com.devcompany.util.portlet.MHFacesPortlet"%>
<portlet:defineObjects />
<%javax.portlet.PortletURL url = renderResponse.createActionURL();
    url.setParameter(MHFacesPortlet.PARAMETER_EXTENDED_ACTION,
        MHFacesPortlet.ACTION_VIEW_MODE_RESET);
%>
<p>The following error has occurred. Click <a href="<%= url.toString()%>">here</a>
to go to the portlet home page.</p>
<%Throwable e = exception;
while (e != null)
{%>
    <%=e.getMessage()%>
    <br>
    <br>
<%
    e.printStackTrace();
    e = e.getCause();
}%>

我已经发现了触发Error.jsp的原因,并得出结论:正如Konstantin在评论中所建议的那样,NullPointerException是由于Error.jsp没有通过portlet呈现而引起的。

当在WebSphere Portal 8.5中使用应用程序时,这个标记被添加到HTML中:

<script type="text/javascript"
src="/wps/PA_AppName/portlet/javax.faces.resource/oamSubmit.js?ln=org.apache.myfaces">

该标记中的路径产生404错误,该错误触发error .jsp,然后产生NullPointerException .
404错误也会导致portlet JSP中的链接失败,因为它们依赖于应该在oamSubmit.js中的javascript。

我通过将此添加到web.xml文件来修复这两个问题:

<context-param>
    <param-name>org.apache.myfaces.RENDER_FORM_SUBMIT_SCRIPT_INLINE</param-name>
    <param-value>true</param-value>
    <description></description>
</context-param>

相关内容

  • 没有找到相关文章

最新更新