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: null source и JSF issue 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