当使用让我疯狂的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似乎一切正常但它给我一种不安的感觉,必须这样做。任何人都可以解释这个问题的原因吗?
答案 0 :(得分:1)
这里的问题相同。我偶然发现mojarra is not defined when javax.faces.PROJECT_STAGE is Production 和submitForm() 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修复了我的问题。