>我在 serveResource 方法中重定向到另一个页面时遇到问题。我收到以下异常
java.lang.IllegalStateException: Config is null, please ensure that your init(config) method calls super.init(config)
以下是我的服务资源方法
public void serveResource(ResourceRequest resourceRequest, ResourceResponse resourceResponse) throws PortletException {
System.out.println("Serve Resource Method Called");
try {
String url = getURL(Long.valueOf(resourceRequest.getParameter("key")));
resourceRequest.setAttribute("url", conn.getURL().toString());
include("/html/viewImage.jsp", resourceRequest, resourceResponse);
} catch (Exception e) {
e.printStackTrace();
}
}
如何解决这个问题?
谢谢
根据您的评论,您正在从不同的 portlet 调用serveResource
。你不应该那样做。
如果在不同的 Portlet 之间共享一个实现,请将其分离到一个公共组件中。您自己调用生命周期方法没有任何业务。此外,您可能正在自己实例化该 Portlet 类(否则将没有要调用 serveResource
on) 的对象),它可能根本不会调用init()
- 我们再次来到这里:调用生命周期函数是门户的业务,而不是您的。
如果我们谈论 jsp-servlet ,我们只能通过两种方式从一个 jsp 切换到另一个 jsp。
1)发送重定向2) 转发页面
如果我们谈论纯 servlet,那么转发页面将如下所示:
RequestDispatcher dispatcher = request.getRequestDispatcher("/template.jsp");
if (dispatcher != null) dispatcher.forward(request, response);
现在为了回答你的问题。Portlet JSR 286 在 RequestDisptcher 之上为 Portlet 创建了一个接口,该接口将生成调度程序引用。下面的代码具有如上所述的含义。
PortletRequestDispatcher dispatcher = resourceRequest.getPortletSession().getPortletContext().getRequestDispatcher("/html/viewImage.jsp");
dispatcher.forward(resourceRequest, resourceResponse);
参考
哼!
谢谢。