3

私はJavascriptとJavaServerFacesを初めて使用し、次の問題が発生しています。

以下のコードは正常に機能しています。

<?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:nullsourceおよびJSFissue1762も参照してください。

新しい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はWebサーバーではまったく実行されませんが、Webブラウザーでのみ実行されます。

于 2012-11-05T13:14:39.920 に答える