在我的应用程序中点击链接后,我希望在页面加载后将焦点集中到页面的一部分。使用静态html,我们可以通过下面的代码部分来完成。
<a href="#C4">Go to Chapter 4</a>
并定义了第4章;
<h2><a name="C4">Chapter 4</a></h2>
<p>This chapter explains ba bla bla</p>
在jsf 2中,为了达到此目的,我找不到名称属性。 任何帮助将不胜感激。
答案 0 :(得分:1)
在JSF中,name属性是根据jsf组件的'id'属性和表单的'id'属性的组合计算的。问题的原因由BalusC here解释。因此,如果为JSF组件指定了id,则还会为其计算名称。
无论如何,开始使用<a>
标签的名称属性的HTML5用法已经过时,建议使用最近容器的id属性。所以不要依赖name属性。
虽然你可以尝试集中其中任何一个:
<h2 id="top4">This is a heading</h2> or
<h2><a id="top4">This is a heading</a></h2>
或者只是将容器集中在目标页面上,如下所示:
在HTML 4.01中
<div id="top4">
<h2>This is a heading</h2>
<p>This is a paragraph</p>
</div>
在HTML 5中
<article id="top4">
<h2>This is a heading</h2>
<p>This is a paragraph</p>
</article>
现在在JSF中,这是您将容器集中在目标页面上的方式:
当结果是不同的页面但在同一个应用程序中时:
<h:link id="link1" value="link1" outcome="welcome" fragment="top4" />
其中结果是welcome.xhtml,它相对于上下文根,而“top4”是在呈现目标页面时要聚焦的容器的id。
链接外部网站时:
<h:outputLink id="link2" value="http://www.msn.com/#spotlight">link2</h:outputLink>
在同一页面内:
<h:link id="link3" value="link3" fragment="top4" />
这里没有指定结果,因此结果将是同一页。
另见: