Javascript 单击h:commandLink会导致未捕获引用错误:未定义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/

我知道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/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;
}