Javascript 单击h:commandLink会导致未捕获引用错误:未定义mojarra
我知道post,我仔细检查了那里所有的可能性 我正在Glassfish3上使用JSF2.0和Mojarra实现 我试图使用两个简单的Javascript 单击h:commandLink会导致未捕获引用错误:未定义mojarra,javascript,jsf,undefined,mojarra,commandlink,Javascript,Jsf,Undefined,Mojarra,Commandlink,我知道post,我仔细检查了那里所有的可能性 我正在Glassfish3上使用JSF2.0和Mojarra实现 我试图使用两个简单的标记来更改应用程序语言。 这是.xhtml页面: <!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/
标记来更改应用程序语言。
这是.xhtml
页面:
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<title>
<h:outputText value = "#{appMessage['page.welcome']}" />
</title>
<f:metadata>
<f:event type = "preRenderView" listener = "#{sessionController.changeLanguage}" />
</f:metadata>
</h:head>
<h:body>
<h1><h:outputText value = "#{appMessage['text.slide.welcome']}" /></h1>
<h:form id = "fm-language">
<h:commandLink action = "#{sessionController.changeLanguage('en')}" value = "#{appMessage['link.english']}" />
<h:commandLink action = "#{sessionController.changeLanguage('de')}" value = "#{appMessage['link.german']}" />
</h:form>
</h:body>
这是HTML代码:
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>The Maze Project</title>
</head>
<body>
<h1>Welcome</h1>
<form id="fm-language" name="fm-language" method="post" action="/maze/welcome.xhtml" enctype="application/x-www-form-urlencoded">
<input type="hidden" name="fm-language" value="fm-language" />
<script type="text/javascript" src="/maze/javax.faces.resource/jsf.js.xhtml?ln=javax.faces">
</script>
<a href="#" onclick="mojarra.jsfcljs(document.getElementById('fm-language'),{'fm-language:j_idt13':'fm-language:j_idt13'},'');return false">English</a>
<a href="#" onclick="mojarra.jsfcljs(document.getElementById('fm-language'),{'fm-language:j_idt15':'fm-language:j_idt15'},'');return false">Deutsch</a>
<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="8038443616162706480:-1387069664590476821" autocomplete="off" />
</form>
</body>
迷宫计划
欢迎
当按下commandLink时,什么也不会发生。没有向服务器发送请求,因此引发以下Java脚本错误:
莫哈拉没有定义
bean方法被正确调用,并且在应用程序的其余部分工作正常。尝试观察Firebug或类似程序中发生的情况,看看是否确实存在服务器通信。 由于它是commandLink,请查看页面上是否存在任何javascript错误 你说,你没有得到任何信息日志,所以我认为请求甚至没有到达你的应用程序
(我在您的xhtml文件中没有看到结束html标记,可能您只是没有粘贴它。)源代码和生成的html输出看起来不错,JSF源代码中有一个
(否则JSF无法自动包含任何CSS/JS文件),html输出中存在javax.faces:JSF.JS
脚本
你说,你有一个JS错误,mojara
没有定义。这只能意味着以下自动生成的脚本
未导致有效的响应。这反过来只能意味着您有一个映射到/*
或*.xhtml
的过滤器,它以某种方式限制jsf.js
资源请求。也许是某个国产的身份验证过滤器没有完全正确地完成其工作。试着打开
在浏览器中查看实际检索到的内容(或使用web developer工具检查响应)。如果它确实不是正确的响应,并且问题确实存在于过滤器中,那么您可能需要重写它,以便在请求URI以开始时它应该继续该链
例如
我可以假设您已经在最简单的视图模板中对此进行了测试吗?也就是说,在同一个
中,除了
之外,绝对没有其他东西?如果没有,请发布一个完整的SSCCE。@BalusC我更新了这个问题。乍一看,看起来还行。{languageController}
bean是如何注释/注册的?@BalusC languageController是会话范围内的ManagedBean。还更新了问题,以正确处理此细节。我觉得很奇怪,根本没有发生任何操作。@BalusC此外,我应该得到类似于action=“#{nonexistent}”:标识“nonexistent”为null,如果EL中指定的方法不存在,则无法调用。奇怪的是,如果使用不存在的操作进行测试,这两个链接不会引发任何类型的错误。如果切换到h:commandButton,会发生什么?在我看来,这是客户方的问题。(JS在不同的浏览器上)我在我的jsf应用程序中总是使用带有返回值的动作方法,你可以尝试向动作方法添加字符串返回值。我在使用带有void的动作方法时遇到了类似的问题。切换到返回字符串很有帮助。这太棒了!你完全正确。那个过滤器阻塞了访问。非常感谢。
HttpServletRequest req = (HttpServletRequest) request;
if (req.getRequestURI().startsWith(req.getContextPath() + ResourceHandler.RESOURCE_IDENTIFIER)) {
chain.doFilter(request, response); // Let it continue.
return;
}