Jsf 2 Jsr303 Bean验证错误消息,不带表单和字段名前缀

Jsf 2 Jsr303 Bean验证错误消息,不带表单和字段名前缀,jsf-2,java-ee-6,bean-validation,Jsf 2,Java Ee 6,Bean Validation,我正在使用bean验证和extval验证。 我在类路径中创建了一个名为ValidationMessages.properties的属性文件。在这个文件中,我自定义了defult消息 例如: javax.validation.constraints.Size.message=这是一个测试消息 当验证fieild时,我可以看到消息I worte,但问题是,我还看到消息“像这样:formName:fieldName这是一个测试” 我想删除这个前缀。当它是jsf验证时,我知道我需要添加javax.fac

我正在使用bean验证和extval验证。 我在类路径中创建了一个名为
ValidationMessages.properties
的属性文件。在这个文件中,我自定义了defult消息

例如:
javax.validation.constraints.Size.message=这是一个测试消息

当验证fieild时,我可以看到消息I worte,但问题是,我还看到消息“像这样:
formName:fieldName这是一个测试”

我想删除这个前缀。当它是jsf验证时,我知道我需要添加
javax.faces.validator.BeanValidator.MESSAGE
属性,但在这里它不起作用

要删除此前缀并仅查看邮件本身,我需要做什么

更新: 如何覆盖bean验证和jsf默认错误消息?(并删除邮件前的表格前缀和文件名) 对于bean消息,我有
ValidationMessages.properties
,对于jsf验证,我有
messages.properties
。我需要在
config xml
web.xml
文件中定义什么?我应该把
javax.faces.validator.BeanValidator.MESSAGE
属性放在哪里

这对我来说非常重要

任何帮助都将受到感谢


提前感谢。

您在哪个文件中指定了javax.faces.validator.BeanValidator.MESSAGE属性

属性必须在JSF已知的资源包(例如在
faces config.xml
中注册的包)中定义,而不是在
ValidationMessages.properties
中定义


如果不希望显示组件标签,但仅显示约束冲突消息,则属性值必须为
{0}
javax.faces.validator.BeanValidator.MESSAGE={0}
)。更多信息可以在JSF2规范第3.5.6.3节中找到。

您在哪个文件中指定了
javax.faces.validator.BeanValidator.MESSAGE
属性

属性必须在JSF已知的资源包(例如在
faces config.xml
中注册的包)中定义,而不是在
ValidationMessages.properties
中定义


如果不希望显示组件标签,但仅显示约束冲突消息,则属性值必须为
{0}
javax.faces.validator.BeanValidator.MESSAGE={0}
)。更多信息可以在JSF2规范第3.5.6.3节中找到。

如果不尝试以下方法,我想现在您已经解决了这个问题:- 在.xhtml页面中,表示声明组件的位置,将lable属性设置为空(“”)。这不会采用前缀值,只会显示错误消息

对于输入文本字段,您需要一些验证,然后像这样使用

<h:inputText id="abc" value="My Textbox" label="">


试试这个,我想你的问题可能会得到解决。

如果不试试这个,我想现在你已经解决了这个问题:- 在.xhtml页面中,表示声明组件的位置,将lable属性设置为空(“”)。这不会采用前缀值,只会显示错误消息

对于输入文本字段,您需要一些验证,然后像这样使用

<h:inputText id="abc" value="My Textbox" label="">


试试这个,我想你的问题可能会得到解决。

实际上你不应该指定属性占位符{0}。如果您这样做,它将显示客户端id。如果组件有标签,那么{0}将被标签名覆盖。根据JSF2规范,不是这样。它在第3.5.6.3节中说:“…[JSF]应该接受从Bean验证API返回的插入消息[…],并将其用作键
javax.faces.validator.BeanValidator.message
(即
{0}
)的第一个编号占位符的替换值。”开发人员可以选择覆盖应用程序资源包中的此消息键,并引用组件标签,该标签将替换第二个编号的占位符(即,
{1}
)。“因此,如果您只想拥有BV消息,而不想拥有标签,则应使用占位符
{0}”
@Gunnar:我在
messages.properties
文件中添加了
javax.faces.validator.BeanValidator.MESSAGE
属性,我在
faces config
文件中声明了该文件,如下所示:
messagesmessage
但现在我看不到用于jsf验证的自定义消息。。。即使我在
messages.properties
文件中有它们的属性,我也能看到结果。为什么???@Gunnar:我必须为bean验证创建属性文件-
ValidationMessages
,为jsf验证创建属性文件-
messages
。我希望这两个文件都覆盖每种验证类型的defult消息。我应该如何在faces配置中定义它们?当我在一个资源包中定义
messages
时,我可以看到没有前缀的ValidationMessages,但是我根本看不到
messages
,看起来它没有覆盖defult消息。如果我使用message bundle,我会看到
messages
,但是我会看到带有前缀的
ValidationMessages
!这就像一个正在覆盖另一个。我如何解决这个问题???实际上,您不应该指定属性占位符{0}。如果您这样做,它将显示客户端id。如果组件有标签,那么{0}将被标签名覆盖。根据JSF2规范,不是这样。它在第3.5.6.3节中说:“…[JSF]应该接受从Bean验证API返回的插入消息[…],并将其用作键
javax.faces.validator.BeanValidator.message
(即
{0}
)的第一个编号占位符的替换值。”开发人员可以选择覆盖应用程序资源包中的此消息键并引用组件标签,该标签将替换第二个编号的占位符(即