【问题标题】:JSF Javascript failure - myfaces not definedJSF Javascript 失败 - myfaces 未定义
【发布时间】:2023-03-27 02:06:01
【问题描述】:

我正在开发一个使用 myfaces 和 primefaces 的网络解决方案。我们的解决方案中有几个页面,其中一些出现此神秘错误myfaces not defined,因为页面中未包含一个 javascript 文件,即jsf.js 文件:

<script type="text/javascript" src="/driwkraft-hig/javax.faces.resource/jsf.js.xhtml?ln=javax.faces&stage=Development">

点击页面上的某些命令链接时发生错误,其中生成的javascript已设置为onClick="myfaces.oam.submitForm...

现在,我了解到这是 JSF 框架根据一些我无法理解的神秘标准添加到页面中的内容。有些页面在使用哪些元素方面似乎是相同的,它在一个上成功,在另一个上失败。

我尝试创建一个测试文件,在其中复制了其中一个失败页面的内容,然后删除了部分,直到它可以找出问题的根源,但这并没有给我任何帮助。我的下一个预感是它可能是某个地方的一些配置错误。但我完全不知道从哪里开始。

我知道我应该可能会在这个问题中添加一些代码或 xml,但我无法发布整个解决方案,所以我认为最好根据要求这样做。 web.xml 有用吗? faces-config.xml 怎么样?

非常感谢任何指导和想法!


编辑 - 添加模板

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets">
    <ui:insert name="metadata" />
    <h:head>
        ....
        <title>
            <ui:insert name="title">
                ....
            </ui:insert>
        </title>

    </h:head>
    <h:body>
        ....
        <ui:insert name="content">
            ....
        </ui:insert>
        ...
    </h:body>
</html>

编辑 - 添加模板客户端

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui"
    xmlns:dp="http://java.sun.com/jsf/composite/dapsys">
    <ui:composition template="/templates/default.xhtml">
        <ui:define name="title">TITLE</ui:define>
        <ui:define name="metadata">
            <f:metadata>
                <f:viewParam name="customerId" value="#{CustomerController.customerId}">
                </f:viewParam>
                <f:viewParam name="edit" value="#{CustomerController.edit}">
                </f:viewParam>
                <f:viewParam name="activeTab" value="#{CustomerController.activeTab}">
                </f:viewParam>
            </f:metadata>
        </ui:define>
        <ui:define name="content">
            ...
        </ui:define>
    </ui:composition>
</html>

【问题讨论】:

  • 好的,在提到的问题中找到了一种解决方法,在模板中手动添加库,如下所示:&lt;h:outputScript name="jsf.js" library="javax.faces" target="head"/&gt;。尽管如此,将下面的 balusCs aswer 标记为已接受,因为这也是他在该问题上的指导;)

标签: jsf primefaces commandlink


【解决方案1】:

如果模板中有 &lt;h:head&gt; 会自动包含 UIViewRoot#getComponentResources() 中的 CSS/JS 依赖项,这些依赖项是通过 JSF 组件上的 @ResourceDependency 注释添加的。

这些问题症状表明模板中没有&lt;h:head&gt;,而是一个普通的&lt;head&gt;。因此 JSF 无法自动包含 CSS/JS 资源依赖关系,这反过来又会导致这个 JS 错误。

要解决此问题,只需确保模板中有 &lt;h:head&gt; 而不是 &lt;head&gt;

<!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"
    xmlns:ui="http://java.sun.com/jsf/facelets">
    <h:head> <!-- Look here. -->
        <title>Blah</title>
    </h:head>
    <h:body>
        <h1>Blah</h1>
        <p>Blah blah.</p>
    </h:body>
</html>

【讨论】:

  • 感谢您输入 BalusC。但是,模板中有一个h:head。我将它粘贴到上面的问题中。
  • 显然您的模板已损坏。例如,您将其放在带有&lt;ui:composition&gt; 的模板客户端中,但不了解&lt;ui:composition&gt; 到底做了什么。在这种情况下,&lt;h:head&gt; 必须进入主模板。
猜你喜欢
  • 2014-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-02
  • 2018-12-03
  • 2011-02-27
  • 2017-05-01
  • 2021-02-01
相关资源
最近更新 更多