在JavaServerFaces2.2(JakartaServerFaces(中使用自定义组件的第一步时,我有点卡住了。
我的问题是,渲染器类如何知道是否抛出了ConverterException?我需要在我的呈现器中进行此检查,因为我希望呈现器将"无效"类应用于HTML输入标记。转换器仅用于此自定义组件。
以下是我研究过的一些事情,但我不相信这些都是正确的方法。
-
FacesContext
中的isValidationFailed
方法不适用于转换错误。所以这是一条死胡同。 -
我可以用属性"invalid"从
UIInput
创建自己的类,并在Converter
类的getAsObject
方法中设置该属性,以防出现任何问题。然后,渲染器检查组件类的属性。 -
我可以从
FacesContext
迭代getMessages
,并从转换器中查找消息。 -
我可以使用
h:message
方法,并在客户端进行一些JavaScriptDOM操作。如果我找到一个带有特定类的h:message,我会将另一个类应用于输入标记。 -
跳过渲染器,在组件类中进行渲染。但不确定这是否给了我什么。
提前感谢!
给定以下事实:
- 该组件是一个
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);