h:commandLink 和不安全内联

h:commandLink and unsafe-inline

如果您查看 Mkyong example h:commandLink 的解析方式,它看起来像这样。

//JSF
<h:commandLink action="#{user.goLoginPage}" value="Login page + Param ">
    <f:param name="username" value="mkyong" />
</h:commandLink>

//HTML output
<script type="text/javascript"
 src="/JavaServerFaces/faces/javax.faces.resource/jsf.js?ln=javax.faces&stage=Development">
</script>

<a href="#"
    onclick="mojarra.jsfcljs(document.getElementById('j_idt6'),
    {'j_idt6:j_idt20':'j_idt6:j_idt20','username':'mkyong'},'');
    return false">
    Login page + Param
</a>

问题在于,如果您强制执行 unsafe-inline,您的浏览器将拒绝执行此操作。

我一直在使用 nonce method.

将内联脚本列入白名单

有没有办法让 h:commandLinks 工作?

HTML 无法 使用 <a> 元素执行 POST 请求。在这种情况下,JSF 只是一个 HTML 代码生成器,对此无能为力。

您有 3 个选项:

  1. 替换为<h:commandButton>
  2. 或者,替换为 <h:link>
  3. 或者,替换为在外部初始化脚本的自定义组件。

另请参阅:

  • How to navigate in JSF? How to make URL reflect current page (and not previous one)
  • Semantics of "?faces-redirect=true" in <commandlink action=...> and why not use it everywhere