我正在学习JSF并遇到过这一行:
<h:messages layout="table"></h:messages>
在示例应用程序中?
我不确定这条线是做什么的?从代码中删除行时没有错误,并且能够运行它并获得相同的输出吗?
答案 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>
专门用于向用户显示消息(通常是错误消息)。
例如,当您对失败的字段进行验证时(例如,用户未填写必填字段,或在仅限数字字段中输入字符串),则会添加FacesMessage
到FacesContext
对象。然后使用<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提供),但原理是相同的。