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 个选项:
- 替换为
<h:commandButton>
。
- 或者,替换为
<h:link>
。
- 或者,替换为在外部初始化脚本的自定义组件。
另请参阅:
- 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
如果您查看 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>
。 - 或者,替换为在外部初始化脚本的自定义组件。
另请参阅:
- 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