如果你看这个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 个选择:
- 替换为
<h:commandButton>. - 或者,替换为
<h:link>. - 或者,替换为在外部初始化脚本的自定义组件。


