Ниже приведен простой пример использования <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>
?