Facelets中的JavaScript导致java.lang.IllegalArgumentException:空源
作者:互联网
我是Java和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 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 source和JSF issue 1762.
如果您升级到较新的Mojarra版本(当前已经是2.1.14),则在这种特殊情况下,对于<字符,您将得到更加不言自明的XML语法错误.指示XML元素的开始. Facelets是一种基于XML的视图技术,由SAX解析器进行解析.您需要替换XML special character<通过& lt;
for(var i=0; i<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