如何告诉渲染器发生了 ConversionException?
How to tell the Renderer that an ConversionException occured?
我在 JavaServer Faces 2.2 (Jakarta Server Faces) 中使用自定义组件迈出第一步时遇到了一些困难。
我的问题是,渲染器 class 如何知道是否抛出了 ConverterException?我需要在渲染器中进行此检查,因为我希望渲染器将 'invalid' class 应用于 HTML 输入标签。该转换器仅用于此自定义组件。
以下是我调查过的一些事情,但我不确定其中任何一个都是正确的方法。
方法是isValidationFailed
从FacesContext
不适用于转换错误。所以这是死胡同。
我可以使用属性 'invalid' 从 UIInput
创建自己的 class 并在 Converter
的 getAsObject
方法中设置它=] class 以防出现任何问题。然后渲染器检查组件 class.
的 属性
我可以从 FacesContext
迭代 getMessages
并查找来自转换器的消息。
我可以使用 h:message
方法并在客户端进行一些 JavaScript DOM 操作。如果我找到具有特定 class 的 h:message,我将另一个 class 应用于输入标签。
跳过渲染器,在组件中进行渲染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);
我在 JavaServer Faces 2.2 (Jakarta Server Faces) 中使用自定义组件迈出第一步时遇到了一些困难。
我的问题是,渲染器 class 如何知道是否抛出了 ConverterException?我需要在渲染器中进行此检查,因为我希望渲染器将 'invalid' class 应用于 HTML 输入标签。该转换器仅用于此自定义组件。
以下是我调查过的一些事情,但我不确定其中任何一个都是正确的方法。
方法是
isValidationFailed
从FacesContext
不适用于转换错误。所以这是死胡同。我可以使用属性 'invalid' 从
的 属性UIInput
创建自己的 class 并在Converter
的getAsObject
方法中设置它=] class 以防出现任何问题。然后渲染器检查组件 class.我可以从
FacesContext
迭代getMessages
并查找来自转换器的消息。我可以使用
h:message
方法并在客户端进行一些 JavaScript DOM 操作。如果我找到具有特定 class 的 h:message,我将另一个 class 应用于输入标签。跳过渲染器,在组件中进行渲染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);