我正在使用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>
如果模板中有一个<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>