2013-10-04 10 views
1

У меня есть простой компонент java, который использует параметры запроса для инициализации свойств. Для этого шов предоставляет удобную аннотацию @RequestParameter, которая вводит параметр запроса непосредственно в свойстве bean, что отлично, за исключением обработки ошибок. Есть ли способ улавливать исключения для синтаксического анализа (NumberFormatException, ...), если параметры запроса нарушены, чтобы обеспечить более удобный вывод ошибок?Исключение разбора парсинга во время создания бина для @RequestParameter в Seam 2.2.2

Я знаю об обработке исключений в pages.xml, но не хочу размещать там NumberFormatException, так как это путь к универсальному без дальнейшего контекста.

Минимальный пример для фасоли, где должно быть пойманным исключение синтаксического анализа для entityId:

@Name("apiPresenter") 
@Scope(ScopeType.PAGE) 
public class MyBean { 

    @RequestParameter 
    private Long entityId; 
    ... 
} 

ответ

1

@RequestParameter удобно, но иногда не очень гибкие. Если вам необходимо отобразить параметры, которые требуют преобразований и/или проверок, Однако рекомендуются использовать определение параметров страницы, так как они позволяют указать JSF конвертер или валидатор для применения во время декодирования параметра, например:

<page view-id="/myview.xthml"> 
    <param name="entityId" value="#{apiPresenter.entityId}" converterId="javax.faces.Long" /> 
</page> 

Если есть ошибки преобразования или проверки, конвертер добавляет сообщение в компонент JSF FacesMessages, который может использоваться для отображения условия ошибки на странице ошибки. Обратите внимание, что вы можете использовать свои собственные преобразователи и/или валидатор здесь, вы даже можете указать, что требуется параметр, как:

<page view-id="/myview.xhtml"> 
    <!-- parameter is required, issue error if it is not provided --> 
    <param name="entityId" value="#{apiPresenter.entityId}" validatorId="your.validator" required="true" /> 
</page> 

В качестве альтернативы, вы можете использовать @RequestParameter присвоить параметр в строку переменной, а затем выполнить преобразование (и возможное перенаправление на страницу с ошибкой) вручную.

+0

Вот чего я боялся - мне очень понравилась простота аннотаций. Спасибо за помощь, хотя! – Roben