Answers:
所述<h:outputLink>
呈现一个fullworthy HTML <a>
与所述正确的URL元件href
,其触发一个可收藏GET请求属性。它不能直接调用托管bean操作方法。
<h:outputLink value="destination.xhtml">link text</h:outputLink>
所述<h:commandLink>
渲染HTML <a>
与元素onclick
,其提交(隐藏)POST形式,并且可以调用一个托管bean动作方法脚本。还需要将其放置在中<h:form>
。
<h:form>
<h:commandLink value="link text" action="destination" />
</h:form>
上的?faces-redirect=true
参数<h:commandLink>
,它会在POST之后触发重定向(按照Post-Redirect-Get模式),仅在实际单击链接时才会提高目标页面的书签性(该URL将不再“落后”) ,但不会href
将<a>
元素的更改为具有完整价值的网址。它仍然存在#
。
<h:form>
<h:commandLink value="link text" action="destination?faces-redirect=true" />
</h:form>
从JSF 2.0开始,还有<h:link>
一个可以使用视图ID(导航案例结果)而不是URL。还将生成一个HTML <a>
元素,并带有中的正确URL href
。
<h:link value="link text" outcome="destination" />
因此,如果是用于纯净且可添加书签的页面到页面导航(例如SO用户名链接),请使用<h:outputLink>
或<h:link>
。这对于SEO也更好,因为机器人通常不加密POST形式或JS代码。另外,由于页面现在可以添加书签并且URL不再“落后”,因此UX将会得到改善。
必要时,可以在构造函数或做预处理工作@PostConstruct
一的@RequestScoped
或@ViewScoped
@ManagedBean
它连接到有问题的目标页面。您可以使用@ManagedProperty
或<f:viewParam>
将GET参数设置为bean属性。
h:link
将JSF视图ID(例如page
)作为值,h:outputLink
并使用真实URL(例如/page.xhtml
或/page.jsf
,或其他取决于您的FacesServlet
映射)作为值。在两种情况下,URL编码都会发生。还有的方式呈现在模板文本EL的行为之间没有差异#{...}
和h:outputText
。两者都转义了预定义的XML实体(不,这与URL编码不同)。在h:outputText
只提供更喜欢attribtues id
,styleClass
等,以控制组件和/或标记。
<a>
元素,仅此而已,没有任何装饰性,无JS代码等
UICommand
组件需要进入UIForm
组件。