В приложениях JavaServer Faces (JSF) перенаправление из управляемого компонента является общим требованием. Перенаправление позволяет вам перейти на другую страницу или URL-адрес после выполнения определенной логики в компоненте. В этой статье мы рассмотрим несколько методов достижения перенаправления из управляемого компонента JSF с примерами кода.
Метод 1: использование внешнего контекста
Класс externalContext в JSF предоставляет удобный метод под названием redirect()для выполнения перенаправления. Вот пример:
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import java.io.IOException;
public void redirectUsingExternalContext() {
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
try {
externalContext.redirect("http://example.com/newpage.xhtml");
} catch (IOException e) {
// Handle exception
}
}
Метод 2: использование результатов навигации
JSF позволяет определять правила навигации в файле face-config.xml. Вы можете указать метод управляемого компонента как результат правила навигации, которое вызовет перенаправление. Вот пример:
<navigation-rule>
<from-view-id>/currentpage.xhtml</from-view-id>
<navigation-case>
<from-outcome>redirectOutcome</from-outcome>
<to-view-id>/newpage.xhtml?faces-redirect=true</to-view-id>
<redirect />
</navigation-case>
</navigation-rule>
В управляемом компоненте:
public String redirectOutcome() {
return "redirectOutcome";
}
Метод 3: использование FacesContext
Класс FacesContext предоставляет метод getExternalContext(), который можно использовать для выполнения перенаправления. Вот пример:
import javax.faces.context.FacesContext;
import java.io.IOException;
public void redirectUsingFacesContext() {
FacesContext facesContext = FacesContext.getCurrentInstance();
try {
facesContext.getExternalContext().redirect("http://example.com/newpage.xhtml");
} catch (IOException e) {
// Handle exception
}
}
Метод 4: использование ViewHandler
Класс ViewHandler JSF позволяет программно создать URL-адрес перенаправления. Вот пример:
import javax.faces.application.ViewHandler;
import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;
public void redirectUsingViewHandler() {
FacesContext facesContext = FacesContext.getCurrentInstance();
ViewHandler viewHandler = facesContext.getApplication().getViewHandler();
String redirectUrl = viewHandler.getRedirectURL(facesContext, "/newpage.xhtml", null, false);
try {
facesContext.getExternalContext().redirect(redirectUrl);
} catch (IOException e) {
// Handle exception
}
}
В этой статье мы рассмотрели различные методы выполнения перенаправления из управляемого компонента JSF. Используя Внешнийконтекст, результат навигации, FacesContext или ViewHandler, вы можете добиться желаемого поведения перенаправления в своих приложениях JSF. Выберите метод, который лучше всего соответствует вашим требованиям, и реализуйте его, используя соответствующие примеры кода.