1

我有一个简单的 java bean,它使用请求参数进行属性初始化。为此,seam 提供了一个方便的@RequestParameter注解,它将请求参数直接注入到一个 bean 属性中,除了错误处理之外,这非常棒。如果请求参数被破坏以提供更用户友好的错误输出,是否有任何方法可以捕获解析异常(NumberFormatException...)?

我知道 pages.xml 中的异常处理,但我不想放在NumberFormatException那里,因为这是在没有进一步上下文的情况下通用的方式。

bean 的最小示例,entityId应该捕获解析异常:

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

  @RequestParameter
  private Long entityId;
  ...
}
4

1 回答 1

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 变量,然后手动执行转换(并最终重定向到错误页面)。

于 2013-10-17T15:02:04.353 回答