<h:messages>在JSF中做了什么?</h:messages>

时间:2010-03-22 10:33:00

标签: jsf message

我正在学习JSF并遇到过这一行:

<h:messages layout="table"></h:messages>

在示例应用程序中?

我不确定这条线是做什么的?从代码中删除行时没有错误,并且能够运行它并获得相同的输出吗?

2 个答案:

答案 0 :(得分:17)

h:messages标记呈现当前JSF视图的所有消息,这些消息未被h:message覆盖(在末尾标记缺失的's)标记。消息可以由您的支持bean(FacesContext.addMessage)显式生成,也可以由JSF隐式生成。

E.g。如果您已根据需要标记了输入值,并且用户在未填写所需值的情况下提交表单,则会向视图添加错误消息。如果h:message标记绑定到相关组件,则会在那里呈现消息,否则它将由视图中的全局h:messages标记呈现(如果有)。

layout属性指定要生成的HTML代码应该是什么样的。 table布局(在您的示例中使用)使用HTML表格来显示消息,而list布局使用项目符号列表(HTML ul标记)。

如果您在视图中指定了h:messages标记而且没有h:message标记,则不会通知用户有关错误的信息。因此,最佳做法是为视图的每个输入组件添加h:message标记,并为整个视图添加h:messages标记,以确保用户可以看到所有消息。

您将在JSF Toolbox找到一个紧凑的JSF标记引用。

答案 1 :(得分:5)

组件<h:message><h:messages>专门用于向用户显示消息(通常是错误消息)。

例如,当您对失败的字段进行验证时(例如,用户未填写必填字段,或在仅限数字字段中输入字符串),则会添加FacesMessageFacesContext对象。然后使用<h:message><h:messages>在页面中显示消息。

组件<h:messages>将显示FacesContext中包含的所有邮件,而<h:message>则专用于特定的clientId(特定字段)。如果您希望将消息放在靠近字段的位置,则后者非常有用。

请注意,您可以添加将向用户显示的任何类型的消息:

FacesContext.getInstance().addMessage(null, new FacesMessage("The message to display"));

在此示例中,第一个参数是此消息所关注的字段的ID字段(当消息是特定字段的验证消息时很有用)。 null表示该消息是一般信息(即未链接到任何特定字段)。

您可以看到此组件here的示例。请注意,此示例使用rich:messages作为“基本”<h:message/>的扩展名(由RichFaces提供),但原理是相同的。