Jsf 如何告知呈现程序发生了ConversionException?

Jsf 如何告知呈现程序发生了ConversionException?,jsf,converters,custom-renderer,Jsf,Converters,Custom Renderer,在JavaServerFaces2.2(JakartaServerFaces)中使用自定义组件的第一步中,我遇到了一些问题 我的问题是,渲染器类如何知道是否抛出了ConverterException?我需要在渲染器中进行此检查,因为我希望渲染器将“无效”类应用于HTML输入标记。转换器仅用于此自定义组件 以下是我研究过的一些事情,但我不相信这些都是正确的方法 该方法是isValidationFailedfromFacesContext不适用于转换错误。所以这是一条死胡同 我可以使用属性“inv

在JavaServerFaces2.2(JakartaServerFaces)中使用自定义组件的第一步中,我遇到了一些问题

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

以下是我研究过的一些事情,但我不相信这些都是正确的方法

  • 该方法是
    isValidationFailed
    from
    FacesContext
    不适用于转换错误。所以这是一条死胡同

  • 我可以使用属性“invalid”从
    UIInput
    创建自己的类,并在
    Converter
    类的
    getAsObject
    方法中设置该属性,以防出现任何中断。渲染器然后检查组件类的属性

  • 我可以从
    FacesContext
    迭代
    getMessages
    ,并从转换器中查找消息

  • 我可以使用
    h:message
    方法,在客户端执行一些JavaScript DOM操作。如果我发现一个带有特定类的h:message,我会将另一个类应用于输入标记

  • 跳过渲染器并在组件类中进行渲染。但我不确定这是否给了我什么

  • 提前谢谢

    鉴于这些事实:

    • 该组件是一个
      ui输出
    • 您感兴趣的是
      getastring()
      是否引发异常,而不是
      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);
    

    UIInput
    已经有一个
    isValid()
    方法。这不是有用吗?@BalusC所以我应该用第二种方法?从UIInput扩展并在转换器类中设置有效(false)?哦?转换器是否连接到非
    UIInput
    组件?这是出乎意料的。为什么要使用这种方法?@BalusC,因为我不太清楚,我认为setValid只适用于验证程序,可能会有其他副作用。我不是这个意思。您询问是否从
    UIInput
    扩展。这意味着要使用自定义渲染器渲染的组件根本不是
    UIInput
    。只是这出乎意料。