この拡張機能として question 、onclick
はすでにajaxテーブルをレンダリングしているため、_<h:commandButton />
_のaction
プロパティにJavascriptを挿入しようとしています。
やりたいこと:リストボックスで選択した項目を取得し、JSF FileServlet
で使用するパラメーターに変換します。すなわち_para2=value1¶m=value2¶m=value3
_
私が持っているものは次のとおりです。
_<script type ="text/javascript">
function myScript() {
var box = document.getElementbyId('myForm:box');
var length = box.options.length;
var paramstring = "";
for (var i = 0; i < length; i++) {
if (i != (length - 1) {
if (box.options[i].selected) {
paramstring = paramstring + "param=" + box.options[i].value + "&";
}
} else {
paramstring = paramstring + "param=" + box.options[i].value;
}
}
if (document.getElementById('myForm:checkbox').checked) {
window.location='fileServlet? + paramstring;
}
}
</script>
_
ページがロードされたときに取得するもの:_javax.servlet.ServletException: Error Parsing /page.xhtml: Error Traced[line:15] The content of elements must consist of well-formed character data or markup.
_
例外を引き起こさないもの:
_<script type ="text/javascript">
function myScript() {
var box = document.getElementbyId('myForm:box');
var length = box.options.length;
var paramstring = "";
if (document.getElementById('myForm:checkbox').checked) {
window.location='fileServlet? + paramstring;
}
}
</script>
_
for (var i = 0; i < length; i++)
またはfor (var i = 0; i < 10; i++)
を追加するとすぐに、ページはロードされません。なぜforループが好きではないのですか?
Faceletsは、XHTML + XMLを使用してHTML出力を生成するXMLベースのビューテクノロジーです。 XMLには、XMLパーサーによる特別な処理を持つ5つの特殊文字があります。
<
タグの開始。>
タグの終わり。"
属性値の開始と終了。'
属性値の代替の開始と終了。&
エンティティの開始(;
で終わる)。<
の場合、XMLパーサーは暗黙的にタグ名と終了タグ>
を探しています。ただし、特定のケースでは、XMLエンティティとしてではなくJavaScript演算子として<
を使用していました。これは、取得したXML解析エラーを完全に説明しています。
要素の内容は、整形式の文字データまたはマークアップで構成されている必要があります。
要するに、JavaScriptファイルをJSファイルではなくXMLドキュメントという間違った場所に書いているので、それに応じてすべてのXML特殊文字をエスケープする必要があります。 <
は<
としてエスケープする必要があります。
だから、本質的に、
for (var i = 0; i < length; i++) {
なる必要があります
for (var i = 0; i < length; i++) {
xMLを有効にします。
ただし、これによりJavaScriptコードの読み取りと保守が難しくなります。 Mozilla Developer Networkの優れたドキュメント XHTML用JavaScriptの記述 で述べられているように、JavaScriptデータを文字データ(CDATA)ブロックに配置する必要があります。したがって、JSFの用語では、次のようになります。
<h:outputScript>
<![CDATA[
// ...
]]>
</h:outputScript>
XMLパーサーは、ブロックのコンテンツをXMLではなく「プレーンバニラ」文字データとして解釈し、XML特殊文字を「そのまま」解釈します。
ただし、<script src>
、またはJSF用語で<h:outputScript>
でインクルードする独自のJSファイルにJSコードを配置することをお勧めします。
<h:outputScript name="functions.js" target="head" />
これにより、JSコードでXMLの特殊文字を心配する必要がなくなります。
同じ問題にぶつかり、上記のCDATAタグでjavascriptが実行されないという同じ問題を抱えていたため、今日この投稿に出くわしました。 CDATAタグを次のように修正しました。
<script type="text/javascript">
//<![CDATA[
your javascript code here
//]]>
</script>
その後、すべてが完璧に機能しました!
時々これが必要になります:
/*<![CDATA[*/
/*]]>*/
これだけでなく:
<![CDATA[
]]>
私のworkspace.xmlにgitの競合が残っていました.
<<<<———————HEAD
不明なタグエラーが発生しました。ファイルに名前を付けないのは少し面倒です。