Я всегда возвращал null
, когда я хотел, чтобы пользователь вернулся на ту же страницу . Например, если пользователь запрашивает редактирование групп, но у него нет доступа к нему, я обычно возвращаю null
и печатаю сообщение об отказе в доступе. Если пользователю разрешено, я просто возвращаю имя следующей страницы, например «Редактировать».
Например,
@ManagedBean(name = "groupController")
@SessionScoped
public class GroupController {
public String prepareEdit() {
if (userIsAllowed()) {
return "Edit";
} else {
JsfUtil.addAccessDeniedMessage("Access denied.");
return null; // return to the same page
}
}
private boolean userIsAllowed() {
return false; // for testing purpose
}
}
Когда я возвращаю null
, та же страница возвращается пользователю. Все идет нормально. Но проблема в том, что после 2 запросов я всегда получаю NullPointerException
вот так:
ПРЕДУПРЕЖДЕНИЕ: StandardWrapperValve [Faces Servlet]: PWC1406:
Servlet.service () для сервлета Faces Сервлет бросил исключение
java.lang.NullPointerException
в com.sun.faces.application.view.StateManagementStrategyImpl $ 4.invokeContextCallback (StateManagementStrategyImpl.java:289)
в javax.faces.component.UIComponent.invokeOnComponent (UIComponent.java:1253)
в javax.faces.component.UIComponentBase.invokeOnComponent (UIComponentBase.java:672)
в javax.faces.component.UIComponent.invokeOnComponent (UIComponent.java:1262)
в javax.faces.component.UIComponentBase.invokeOnComponent (UIComponentBase.java:672)
в com.sun.faces.application.view.StateManagementStrategyImpl.restoreView (StateManagementStrategyImpl.java:284)
в com.sun.faces.application.StateManagerImpl.restoreView (StateManagerImpl.java:177)
в com.sun.faces.application.view.ViewHandlingStrategy.restoreView (ViewHandlingStrategy.java:131)
в com.sun.faces.application.view.FaceletViewHandlingStrategy.restoreView (FaceletViewHandlingStrategy.java:430)
в com.sun.faces.application.view.MultiViewHandler.restoreView (MultiViewHandler.java:143)
в com.sun.faces.lifecycle.RestoreViewPhase.execute (RestoreViewPhase.java:199)
на com.sun.faces.lifecycle.Phase.doPhase (Phase.java:101)
в com.sun.faces.lifecycle.RestoreViewPhase.doPhase (RestoreViewPhase.java:110)
на com.sun.faces.lifecycle.LifecycleImpl.execute (LifecycleImpl.java:118)
в javax.faces.webapp.FacesServlet.service (FacesServlet.java:312)
в org.apache.catalina.core.StandardWrapper.service (StandardWrapper.java:1523)
в org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:279)
в org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:188)
в org.apache.catalina.core.StandardPipeline.invoke (StandardPipeline.java:641)
на com.sun.enterprise.web.WebPipeline.invoke (WebPipeline.java:97)
в com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke (PESessionLockingStandardPipeline.java:85)
в org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:185)
в org.apache.catalina.connector.CoyoteAdapter.doService (CoyoteAdapter.java:332)
в org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:233)
на com.sun.enterprise.v3.services.impl.ContainerMapper.service (ContainerMapper.java:165)
в com.sun.grizzly.http.ProcessorTask.invokeAdapter (ProcessorTask.java:791)
на com.sun.grizzly.http.ProcessorTask.doProcess (ProcessorTask.java:693)
на com.sun.grizzly.http.ProcessorTask.process (ProcessorTask.java:954)
на com.sun.grizzly.http.DefaultProtocolFilter.execute (DefaultProtocolFilter.java:170)
в com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter (DefaultProtocolChain.java:135)
на com.sun.grizzly.DefaultProtocolChain.execute (DefaultProtocolChain.java:102)
на com.sun.grizzly.DefaultProtocolChain.execute (DefaultProtocolChain.java:88)
на com.sun.grizzly.http.HttpProtocolChain.execute (HttpProtocolChain.java:76)
в com.sun.grizzly.ProtocolChainContextTask.doCall (ProtocolChainContextTask.java:53)в com.sun.grizzly.SelectionKeyContextTask.call (SelectionKeyContextTask.java:57) в com.sun.grizzly.ContextTask.run (ContextTask.java:69) в com.sun.grizzly.util.AbstractThreadPool $ Abstracter.doWork (.java: 330) на com.sun.grizzly.util.AbstractThreadPool $ Worker.run (AbstractThreadPool.java:309) на java.lang.Thread.run (Thread.java:619)
Кто-нибудь знает, правильно ли возвращать null
, чтобы получить ту же страницу?Я не нашел никакой спецификации.