JSF / Seam Проверить и перенаправить на новую страницу - PullRequest
0 голосов
/ 09 ноября 2011

У меня есть приложение JSF 1.2 / Seam 2.2.2. У меня есть кнопка, и при нажатии кнопки я запускаю проверки объектов на текущей странице, запрашиваю некоторые зависимые объекты и запускаю проверку. Если проверка пройдена, то мне нужно перенаправить пользователя на новую страницу. В противном случае мне нужно отобразить ошибки проверки на той же странице. Ниже код работает нормально и отображается сообщение об ошибке. Но как мне перенаправить на новую страницу?

<h:messages id="errorMsg" errorClass="errorMessages" />
<a4j:commandButton action="#{myController.shouldRedirectToNewPage()}"
                value="Button" styleClass="button" />

public void shouldRedirectToNewPage() {
    //Run validation on objects in the current page
    //Query for dependent objects and run validation
    if(validationFails) {
       facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,
          "ERROR MESSAGE", null)); 
       return;
   }
}

1 Ответ

3 голосов
/ 09 ноября 2011

Либо используйте ExternalContext#redirect():

public void shouldRedirectToNewPage() throws IOException {
    // ...

    if (validationFails) {
        facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR MESSAGE", null));
    } else {
        facesContext.getExternalContext().redirect("otherpage.jsf");
    }
}

или вернуть строку регистрационного случая обычным способом:

public String shouldRedirectToNewPage() {
    // ...

    if (validationFails) {
        facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR MESSAGE", null));
        return null;
    } else {
        return "otherpage";
    }
}

со следующим в faces-config.xml:

<navigation-case>
    <from-outcome>otherpage</from-outcome>
    <to-view-id>/otherpage.jsf</to-view-id>
    <redirect/>
</navigation-case>

(обратите внимание на <redirect/>, это делает его перенаправлением вместо (по умолчанию) вперед)


Не связано с конкретной проблемой, выполнение проверки внутри метода действия не обязательно является наилучшей практикой.Это должно быть сделано Validator.Если он выдает ValidatorException, то метод действия просто не будет вызываться.

...