3

我是 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>

在此处输入图像描述

有没有人对如何在 javascript 中执行 FOR 循环而不会出错有任何建议?

在此先感谢,伊曼纽尔

4

1 回答 1

4

您正在使用 Mojarra 的过时版本,该版本暴露了一个错误,IllegalArgumentException: null source当视图文件包含 XML 语法错误或无法恢复视图时,会错误地抛出这种错误。另请参阅java.lang.IllegalArgumentException: null sourceJSF 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 根本不在 webserver 中运行,而只在 webbrowser 中运行。

于 2012-11-05T13:14:39.920 回答