我有一个简单的java bean,它使用请求参数进行属性初始化。为此,seam提供了一个方便的@RequestParameter
注释,它直接在bean属性中注入请求参数,除了错误处理之外,这是很好的。如果请求参数被破坏以提供更加用户友好的错误输出,有没有办法捕获解析异常(NumberFormatException
,...)?
我知道pages.xml中的异常处理,但我不想在那里放置NumberFormatException
,因为它是通用的,没有进一步的上下文。
bean的最小示例,其中应该捕获解析entityId
的异常:
@Name("apiPresenter")
@Scope(ScopeType.PAGE)
public class MyBean {
@RequestParameter
private Long entityId;
...
}
答案 0 :(得分: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
将参数分配给String变量,然后手动执行转换(最终重定向到错误页面)。