2013-03-13 4 views
1

Я работаю над веб-решением с использованием поверхностей и поверхностей. У нас есть несколько страниц в нашем решении, и некоторые из этой мистической ошибки myfaces not defined, потому что есть яваскрипт файл, который не включен на странице, а именно jsf.js файла:JSF Javascript failure - myfaces not defined

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

Ошибка возникает при нажатии на определенном commandlinks на странице, где сгенерированный javascript был установлен в onClick="myfaces.oam.submitForm...

Теперь я понимаю, что это что-то, что фреймворк JSF добавляет к странице на основе некоторых мистических критериев, которые я не понимаю. Существуют страницы, которые кажутся равными в отношении того, какие элементы используются, и он преуспевает в одном, а с другой - терпит неудачу.

Я попытался создать тестовый файл, где я скопировал содержимое одной из страниц с ошибкой, а затем удалил части, пока это не сработает, чтобы выяснить, что является источником проблемы, но это ничего мне не дало. Моя следующая догадка в том, что это может быть какая-то ошибка конфигурации. Но я совершенно и совершенно пуст о том, с чего начать.

Я понимаю, что мне следовало бы добавить к этому вопросу какой-то код или xml, но я не могу опубликовать все решение, поэтому считаю, что лучше сделать это по запросу. Будет ли полезен web.xml? Как насчет faces-config.xml?

Любые рекомендации и мысли очень ценятся!


Edit - добавление шаблона

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

Edit - добавление клиента шаблона

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

возможно дубликат [Что может вызвать «JSF не определен» ошибка в консоли браузера] (http://stackoverflow.com/questions/9971925/what-can-cause-jsf-is-not-defined -error-in-browser-console) – partlov

+0

ok, нашел обходной путь в указанном вопросе, добавив библиотеку вручную в шаблон следующим образом: ' '. Тем не менее, маркировка balusCs aswer ниже принята, поскольку это было его руководство в этом вопросе, а также;) –

ответ

3

Это автоматически включается, если есть в шаблоне, который автоматически делает CSS/JS <h:head> зависимых от UIViewRoot#getComponentResources(), которые добавляются через @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> 
+0

спасибо за ваш вход BalusC. Однако в шаблоне есть 'h: head'. Я вложу его в вопрос выше. –

+2

Видимо ваш шаблон не работает. Например, вы разместили его в клиенте шаблона с '', не понимая, что именно '' ui: composition> 'делает. В этом случае '' должен идти в главном шаблоне. – BalusC