2016-01-07 13 views
2

В моих страницах JSF коде У меня есть структура похож на это:Зачем использовать какой-либо элемент a4j в jsf добавить к коду страницы второй тег тела и головы?

<frameset id="navframeset"> 
    <frame name="navframe" src='<c:url value="TopNavigation.jsf"/>'/> 
    <frameset> 
     <frame name="leftframe" src='<c:url value="Test1.jsf"/>'/> 
     <frame name="tabbedframe" src='<c:url value="Test2.jsf"/>' /> 
</frameset> 

В Test2.jsf я включал следующее RichFaces библиотек:

<%@ taglib uri="http://richfaces.org/a4j" prefix="a4j"%> 
<%@ taglib uri="http://richfaces.org/rich" prefix="rich"%> 

Когда я пытаюсь использовать любого из a4j элемента код страницы, например a4j: кнопка, то этот код генерируется в мой выходной файл HTML:

<head>...</head> 
<body>..</body> 
<head><script xmlns="http://www.w3.org/1999/xhtml">A4J.AJAX._scriptEvaluated=true;</script></head> 
<body marginwidth="0" marginheight="0"></body> 

Эти две последние строки добавляются, когда я использую a4j элемента в моем коде страницы и дублирует существующие теги body и html (первые две строки). Версия richfaces, которую я использую, - это 3.1.6.SR1. Может ли кто-нибудь дать мне подсказку, как это исправить?

ответ

2

Хорошо, это проблема библиотеки 3.1.6.SR1, последняя из которых поддерживает версию jsf 1.1. Я нашел в Google следующее решение https://developer.jboss.org/thread/196997?tstart=0. Однако это не идеально и не работает в любой ситуации. Из-за этого я пытался решить эту проблему другими способами и как предложение в ссылке выше, я изменил AJAX.js файл формы richfaces-impl.jar. Я взял файл AJAX.js из версии richfaces-3.2 и заменил код в 3.1.6.SR1. Следующие части должны быть изменены:

line 1412 // Добавлен A4J.AXAX.TestScriptEvaluation();

A4J.AJAX.processResponse = function(req) { 
     A4J.AJAX.TestScriptEvaluation(); 
     var options = req.options; 
     var ajaxResponse = req.getResponseHeader('Ajax-Response'); 

линия 2014 Функция TestScriptEvaluation следует заменить на следующее одно:

//Test for re-evaluate Scripts in updated part. Opera & Safari do it. 
A4J.AJAX._scriptEvaluated=false; 
A4J.AJAX.TestScriptEvaluation = function() { 
if ((!document.all || window.opera) && !A4J.AJAX._scriptTested){ 


    try{  
     // Simulate same calls as on XmlHttp 
     var oDomDoc = Sarissa.getDomDocument(); 
     var _span = document.createElement("span"); 
     document.body.appendChild(_span); 
     // If script evaluated with used replace method, variable will be set to true 
     var xmlString = "<html xmlns='http://www.w3.org/1999/xhtml'><sc"+"ript>A4J.AJAX._scriptEvaluated=true;</scr"+"ipt></html>"; 
     oDomDoc = (new DOMParser()).parseFromString(xmlString, "text/xml"); 
     var _script=oDomDoc.getElementsByTagName("script")[0]; 
     if (!window.opera && !A4J.AJAX.isWebkitBreakingAmps() && _span.outerHTML) { 





      _span.outerHTML = new XMLSerializer().serializeToString(_script); 
     } else { 
      var importednode ; 
      importednode = window.document.importNode(_script, true); 
      document.body.replaceChild(importednode,_span); 
     } 

    } catch(e){ /* Mozilla in XHTML mode not have innerHTML */ }; 

} 

     A4J.AJAX._scriptTested = true; 
    } 

И это все. С этими изменениями эта проблема больше не существует.

+0

У меня такая же проблема, и я пробовал ваше решение, которое, к сожалению, не работало. Было бы проблемой, если я удалю код, который записывается в документ в AJAX.js? Благодарю. –