Ниже приведен простой пример использования <f:viewAction>.
<f:metadata>
<f:viewParam name="id" value="#{testManagedBean.id}" maxlength="20"/>
<f:viewAction action="#{testManagedBean.viewAction}"/>
</f:metadata>
Управляемый bean.
@ManagedBean
@ViewScoped
public final class TestManagedBean implements Serializable {
private static final long serialVersionUID = 1L;
private Long id; //Getter and setter.
public void viewAction() {
System.out.println("viewAction() called : " + id);
}
}
Параметр id передается через URL-адрес. Существует ошибка преобразования, когда через рассматриваемый URL-адрес передается нечисловое значение типа xxx, и метод viewAction(), связанный с прослушивателем <f:viewAction>, не вызывается.
В этом случае значение id составляет null. Я хотел бы перенаправить на другую страницу, когда id не конвертируется в желаемый тип целевого объекта (например, в этом случае) или id не проверяется на соответствие указанным критериям проверки, чтобы избежать потенциальных исключений, которые, вероятно, будут LazyDataModel#load() метод PrimeFaces или где-нибудь еще в связанном управляемом bean, когда доступ к этим параметрам выполняется в соответствующем управляемом bean, Для этого нужно вызвать метод viewAction().
Как это сделать? Должен ли я использовать
<f:event type="preRenderView">
в сочетании с <f:viewAction>?