编程语言
首页 > 编程语言> > Facelets中的JavaScript导致java.lang.IllegalArgumentException:空源

Facelets中的JavaScript导致java.lang.IllegalArgumentException:空源

作者:互联网

我是JavaJava 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 onl oad="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 onl oad="initialize()">

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

    </body>
</html>

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

提前致谢,
伊曼纽尔

解决方法:

您正在使用Mojarra的过时版本,该版本暴露了一个错误,其中当视图文件包含XML语法错误或无法还原视图时,会错误抛出这种IllegalArgumentException:空源.另请参见java.lang.IllegalArgumentException: null sourceJSF issue 1762.

如果您升级到较新的Mojarra版本(当前已经是2.1.14),则在这种特殊情况下,对于<字符,您将得到更加不言自明的XML语法错误.指示XML元素的开始. Facelets是一种基于XML的视图技术,由SAX解析器进行解析.您需要替换XML special character<通过& 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>

也可以看看:

> Writing JavaScript for XHTML

与具体问题无关,JS语法错误(我已经在代码段中修复的未初始化的var i)实际上是一个完全不同的问题,只会在浏览器的JS控制台的客户端显示错误,并且绝对不会导致异常.作为JS的服务器端根本不在网络服务器中运行,而仅在网络浏览器中运行.

标签:jsf-2,facelets,javascript
来源: https://codeday.me/bug/20191031/1977651.html