如何告诉渲染器发生了 ConversionException?

How to tell the Renderer that an ConversionException occured?

我在 JavaServer Faces 2.2 (Jakarta Server Faces) 中使用自定义组件迈出第一步时遇到了一些困难。

我的问题是,渲染器 class 如何知道是否抛出了 ConverterException?我需要在渲染器中进行此检查,因为我希望渲染器将 'invalid' class 应用于 HTML 输入标签。该转换器仅用于此自定义组件。

以下是我调查过的一些事情,但我不确定其中任何一个都是正确的方法。

  1. 方法是isValidationFailedFacesContext不适用于转换错误。所以这是死胡同。

  2. 我可以使用属性 'invalid' 从 UIInput 创建自己的 class 并在 ConvertergetAsObject 方法中设置它=] class 以防出现任何问题。然后渲染器检查组件 class.

    的 属性
  3. 我可以从 FacesContext 迭代 getMessages 并查找来自转换器的消息。

  4. 我可以使用 h:message 方法并在客户端进行一些 JavaScript DOM 操作。如果我找到具有特定 class 的 h:message,我将另一个 class 应用于输入标签。

  5. 跳过渲染器,在组件中进行渲染class。不确定这是否能给我任何帮助。

提前致谢!

鉴于这些事实:

  • 组件是 UIOutput
  • 您对 getAsString() 是否抛出异常感兴趣,因此对 getAsObject() 是否抛出异常不感兴趣(这仅适用于 UIInput 组件并且通常仅在提交输入时调用值需要转换为 bean 属性)。
  • 转换器由渲染器(间接)调用。

那么答案就是简单地将转换器调用放在 try-catch 中。例如

Object modelValue = getValue();
String outputValue;

try {
    outputValue = getConverter().getAsString(context, component, modelValue);
}
catch (ConverterException e) {
    outputValue = "Conversion error occurred! " + e.getMessage();
}

responseWriter.write(outputValue);