Skip to main content
 首页 » 编程设计

jsf之h :commandLink and unsafe-inline

2025年05月04日96kerrycode

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

另见: