JSF Javascript失败 - myfaces未定义

时间:2013-03-13 11:10:51

标签: jsf primefaces commandlink

我正在使用myfaces和primefaces开发Web解决方案。我们的解决方案中有几个页面,其中一些得到了这个神秘的错误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>

1 个答案:

答案 0 :(得分:3)

如果模板中有<h:head>自动包含来自UIViewRoot#getComponentResources()的CSS / JS依赖项(通过@ResourceDependency注释添加到JSF组件上,则自动包含它。

这些问题症状表明模板中没有<h:head>,而是普通<head>。因此,JSF无法自动包含CSS / JS资源依赖项,这反过来会导致此JS错误。

要解决此问题,请确保模板中有<h:head>而不是<head>

<!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>