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组件。