22

这是<h:outputLabel>标签文档的摘录:

呈现 HTML“标签”元素。如果指定,则将组件的当前值呈现为标签文本。如果指定了“for”属性,则查找“for”属性值指定的组件,并将其客户端id渲染为“for”属性值。如果指定了“styleClass”属性,则将其值呈现为“class”属性的值。

我对for属性感到困惑。它的目的是什么?

4

1 回答 1

55

如果您先学习基本的 HTML,则更容易理解。JSF 在这个问题的上下文中,即仅仅是一个 HTML 代码生成器。htmldog.com上有一个出色的 HTML 教程。由<label>生成的在这里<h:outputLabel>解释。

HTML 标签:标签

表单元素的标签(inputtextareaselect

可选属性

forfor当 的值与元素的id属性值匹配时,可用于将标签与表单元素相关联。

例子

<label for="email">Email address</label>
<input type="text" name="email" id="email" />

因此,该for属性必须指向idlabel 意图标记的输入组件。该标签具有以下 SEO 和可用性优势:

  1. 它以文本形式讲述相关的输入元素。
  2. 它在被聚焦/单击时聚焦并激活关联的输入元素。

由于 JSF 在这个问题的上下文中只是一个 HTML 代码生成器,因此同样适用于生成该 HTML 的 JSF 组件。

<h:outputLabel for="email">Email address</h:outputLabel>
<h:inputText id="email" />

搜索机器人将找到标签并索引相关的输入元素。视障人士使用的屏幕阅读器会找到标签并通过声音告诉其内容。最终用户可以单击标签以查看相关输入得到关注。单击标签时将选中复选框/单选按钮。单击标签时,文件输入将打开浏览对话框。等等。


应该注意的是,相对很多低质量的 JSF 教程都在滥用<h:outputLabel>其唯一目的是打印出一些 Hello World 文本,如下所示:

<h:outputLabel value="#{bean.message}" />

因此,这个特定的用例是错误的。相反,<h:outputText>应该使用 a :

<h:outputText value="#{bean.message}" />

甚至只是模板文本中的 EL

#{bean.message}

如果您遇到这样的教程滥用<h:outputLabel>这种方式,强烈建议您停止阅读并前往更自尊的资源。这有力地表明本教程的作者对基本 HTML 一无所知,而这反过来又是学习 JSF 之前非常重要的先决条件。一个对基本 HTML 几乎一无所知的人肯定不是一名优秀的 JSF 老师。您永远不知道这种低质量的学习资源是否会继续陷入教学不良做法的螺旋式下降,因此最好转向不同的学习资源。您可以在我们的 JSF wiki 页面底部和jsf.zeef.com找到链接的合理资源。

于 2013-07-09T11:40:53.180 回答