我已阅读问题Handle ViewExireException/ajax 并显示 Primefaces 对话框和 BalusC 的答案。我想ViewExpiredException
通过显示带有刷新页面信息的警报来处理。我接受了 BalusC 向用户RequestContext
提出的让 JavaScript 执行的建议,并且我已经删除了 JSF 重定向,因为我没有使用它:
@Override
public void handle() throws FacesException {
for (Iterator<ExceptionQueuedEvent> i = getUnhandledExceptionQueuedEvents().iterator(); i.hasNext();) {
ExceptionQueuedEvent event = i.next();
ExceptionQueuedEventContext context = (ExceptionQueuedEventContext) event.getSource();
Throwable t = context.getException();
if (t instanceof ViewExpiredException) {
ViewExpiredException vee = (ViewExpiredException) t;
try {
log.info("Catched ViewExpiredException for view {}", vee.getViewId());
RequestContext.getCurrentInstance().execute("handleViewExpired("+vee.getViewId()+")");
return;
} finally {
i.remove();
}
}
}
// At this point, the queue will not contain any ViewExpiredEvents.
// Therefore, let the parent handle them.
getWrapped().handle();
}
问题是,我NullPointerException
在从处理程序执行句柄方法时得到了wrapped
。我添加了return子句,添加后效果是一样的:
[30.01.13 15:45:59:140 CET] 0000002e ErrorPageWrit E 发生异常 javax.faces.FacesException: java.lang.NullPointerException at org.apache.myfaces.shared_impl.context.ExceptionHandlerImpl.wrap(ExceptionHandlerImpl.java:241 ) 在 org.apache.myfaces.lifecycle 的 my.project.web.handler.ViewExpiredExceptionExceptionHandler.handle(ViewExpiredExceptionExceptionHandler.java:59) 的 org.apache.myfaces.shared_impl.context.ExceptionHandlerImpl.handle(ExceptionHandlerImpl.java:156)。 LifecycleImpl.executePhase(LifecycleImpl.java:191) 在 org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
所以,父句柄方法被执行,认为应该有来自方法的返回(信息字符串被记录)。
我正在使用PrimeFaces 3.4和MyFaces 2.0.7,WebSphere 7上的所有内容。
我不明白这里发生了什么。是否有可能实现我想要的,如果可以,我做错了什么?