Есть ли способ избежать перехвата исключений в JSF, возникающих в методах проверки Bean, и обрабатывать их так же, как исключения, возникающие в других методах Bean? - PullRequest
3 голосов
/ 16 марта 2012

В проекте JSF, с которым я работаю Исключения, создаваемые Бинами, обычно обрабатываются JSF, перенаправляющими пользователя на страницу ошибки, но когда они возникают внутри метода проверки Бина, JSF обрабатывает их, отображая в относительном теге <h:message> вместо этого сообщение об исключении.

Я бы хотел, чтобы исключения, возникающие в методах валидации, обрабатывались так же, как и другие исключения, возникающие в бинах. Есть ли способ добиться этого?

Тип проверки, которую я использую, - через метод проверки бина, например на странице JSF:

<h:inputText value="#{Bean.field}" validator="#{Bean.validate}" />

и, в бэк-коде компонента:

public void validate(FacesContext context, UIComponent component, Object value){
   // validation logic here
}

Спасибо, Андреа

1 Ответ

1 голос
/ 16 марта 2012

Это "по замыслу".

Преобразуйте этот валидатор в полноценный класс, который реализует Validator. Любые исключения, кроме ValidatorException, приведут к появлению страницы ошибки HTTP 500.

1007 * Е.Г. *

public class MyValidator implements Validator {

    public void validate(FacesContext context, UIComponent component, Object value) {
        // validation logic here
    }

}

который вы регистрируете как <validator> в faces-config.xml

<validator>
    <validator-id>myValidator</validator-id>
    <validator-class>com.example.MyValidator</validator-class>
</validator>

и использовать следующим образом во входах

<h:inputText ... validator="myValidator" />

или

<h:inputText ...>
    <f:validator validatorId="myValidator" />
</h:inputText>
...