Может ли метод Java ManagedBean вернуть ноль? - PullRequest
1 голос
/ 18 октября 2011

Я всегда возвращал 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, чтобы получить ту же страницу?Я не нашел никакой спецификации.

1 Ответ

1 голос
/ 18 октября 2011

Возвращение null в порядке.

Ваша проблема вызвана чем-то другим.Могу поспорить, что вы используете очень раннюю версию Mojarra 2.0, в которой есть некоторые серьезные ошибки в частичном сохранении состояния.Я предлагаю обновить до последней версии 2.0 или даже 2.1.Вы можете найти их все на домашней странице Мохарры .

...