f:ajax存在于页面

时间:2017-04-06 15:17:25

标签: javascript ajax jsf myfaces

当使用让我疯狂的myfaces时,我遇到了一个奇怪的问题。我尝试了2.2.10和2.2.12版本。我也使用primefaces 6.0,但这可能不相关。

每当我在页面上包含f:ajax标记时,commandLink不再有效,我在JavaScript控制台中收到错误:

ReferenceError: myfaces is not defined

深入研究结果表明,当页面上有f:ajax标记时,不再生成以下行:

<script type="text/javascript" src="/console/javax.faces.resource/oamSubmit.js.jsf?ln=org.apache.myfaces"></script>

当我手动添加此脚本行时,一切都有效!我通过在标记之后添加folling javascript来执行此操作:

<script>
if (!window.myfaces) {
  document.write(unescape('%3Cscript type="text/javascript" src="/console/javax.faces.resource/oamSubmit.js.jsf?ln=org.apache.myfaces"%3E%3C/script%3E'));
}
</script>

虽然这个hack似乎一切正常但它给我一种不安的感觉,必须这样做。任何人都可以解释这个问题的原因吗?

1 个答案:

答案 0 :(得分:1)

这里的问题相同。我偶然发现mojarra is not defined when javax.faces.PROJECT_STAGE is ProductionsubmitForm() not defined for myfaces.JSF_JS_MODE 'minimal-modern'并发现该问题仅存在于javax.faces.PROJECT_STAGE = Production。

添加

<context-param>
    <param-name>org.apache.myfaces.JSF_JS_MODE</param-name>
    <param-value>minimal</param-value>
</context-param>

到web.xml修复了我的问题。