JavaScript в Facelets причинява java.lang.IllegalArgumentException: нулев източник

Нов съм в Javascript и Java Server Faces и имам следващия проблем.

Кодът по-долу работи добре:

<?xml version="1.0" encoding="UTF-8"?>
<!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:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets">
    <head>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <script type="text/javascript">
        function initialize() 
        {
            alert("Testing");
        }
    </script>
    </head>
    <body onload="initialize()">

        <h1 align="center">Sol-Tech</h1><br  />

    </body>
</html>

Но когато добавя FOR цикъл, той не работи:

<?xml version="1.0" encoding="UTF-8"?>
<!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:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets">
    <head>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <script type="text/javascript">
        function initialize() 
        {
            for(var i; i<3; i++)
            {
                alert("Test");  
            }
        }
    </script>
    </head>
    <body onload="initialize()">

        <h1 align="center">Sol-Tech</h1><br  />

    </body>
</html>

въведете описание на изображението тук

Някой има ли предложение как да изпълните FOR цикъл в javascript, без да получите грешка?

Благодаря предварително Емануел


person Mick Morrison    schedule 05.11.2012    source източник


Отговори (1)


Използвате остаряла версия на Mojarra, която разкрива грешка, при която този вид IllegalArgumentException: null source е неправилно хвърлен, когато файлът на изгледа съдържа грешка в XML синтаксиса или когато изгледът не може да бъде възстановен. Вижте също java.lang.IllegalArgumentException: нулев източник и JSF проблем 1762.

Ако надстроите до по-нова версия на Mojarra (в момента вече 2.1.14), тогава ще влезете в тази случай получавате по-самообясняваща синтактична грешка в XML върху знака <, който указва началото на XML елемент. Facelets е именно технология за изглед, базирана на XML и анализирана от SAX анализатор. Ще трябва да замените XML специалния знак < с &lt;

for(var i=0; i&lt;3; i++) {
    alert("Test");  
}

или да поставите целия скрипт в блок CDATA

<script type="text/javascript">
  <![CDATA[
    function initialize() 
    {
        for(var i=0; i<3; i++)
        {
            alert("Test");  
        }
    }
  ]]>
</script>

или просто да го поставите в неговия собствен .js файл, така че да не бъде анализиран като XML.

<script type="text/javascript" src="script.js"></script>

Вижте също:


Несвързано с конкретния проблем, синтаксичната грешка на JS (неинициализирано var i, което вече коригирах в кодови фрагменти) всъщност е напълно различен проблем и ще покаже грешка само от страна на клиента в JS конзолата на браузъра и определено не причинява изключение от страна на сървъра, тъй като JS изобщо не работи в уеб сървър, а само в уеб браузър.

person BalusC    schedule 05.11.2012