Als Erweiterung von question versuche ich, Javascript in die onclick
-Eigenschaft eines <h:commandButton />
Einzufügen, da action
bereits einen Ajax rendert Tabelle.
Was ich tun möchte: Holen Sie sich die ausgewählten Elemente in ein Listenfeld und wandeln Sie sie in Parameter um, die in einem JSF FileServlet
verwendet werden sollen. d.h. para2=value1¶m=value2¶m=value3
Folgendes habe ich:
<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>
Was bekomme ich, wenn die Seite geladen wird: javax.servlet.ServletException: Error Parsing /page.xhtml: Error Traced[line:15] The content of elements must consist of well-formed character data or markup.
Was löst keine Ausnahme aus:
<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>
Sobald ich for (var i = 0; i < length; i++)
oder sogar for (var i = 0; i < 10; i++)
hinzufüge, wird die Seite nicht geladen. Warum mag es nicht die for-Schleife?
Facelets ist eine XML-basierte Ansichtstechnologie, die XHTML + XML verwendet, um HTML-Ausgaben zu generieren. XML hat fünf Sonderzeichen, die vom XML-Parser speziell behandelt werden:
<
Start eines Tags.>
Das Ende eines Tags."
Beginn und Ende eines Attributwerts.'
Der alternative Anfang und das alternative Ende eines Attributwerts.&
Der Anfang einer Entität (der mit ;
Endet).Im Fall von <
Sucht der XML-Parser implizit nach dem Tag-Namen und dem End-Tag >
. In Ihrem speziellen Fall haben Sie jedoch <
Als JavaScript-Operator und nicht als XML-Entität verwendet. Dies erklärt den aufgetretenen XML-Parsing-Fehler vollständig:
Der Inhalt von Elementen muss aus wohlgeformten Zeichendaten oder Markierungen bestehen.
Im Wesentlichen schreiben Sie JavaScript-Code an der falschen Stelle, ein XML-Dokument anstelle einer JS-Datei, sodass Sie alle XML-Sonderzeichen entsprechend maskieren sollten. Der <
Muss als <
Maskiert werden.
Also im Wesentlichen die
for (var i = 0; i < length; i++) {
muss werden
for (var i = 0; i < length; i++) {
um es XML-gültig zu machen.
Dies erschwert jedoch das Lesen und Verwalten des JavaScript-Codes. Wie in Mozilla Developer Networks ausgezeichnetem Dokument Schreiben von JavaScript für XHTML angegeben, sollten Sie den JavaScript-Code in einem CDATA-Block (Character Data) platzieren. In JSF-Begriffen wäre das also:
<h:outputScript>
<![CDATA[
// ...
]]>
</h:outputScript>
Der XML-Parser interpretiert den Inhalt des Blocks als "normale Vanilla" -Zeichen und nicht als XML und interpretiert daher die XML-Sonderzeichen "wie sie sind".
Viel besser ist es jedoch, den JS-Code einfach in eine eigene JS-Datei zu schreiben, die Sie mit <script src>
Oder in JSF-Begriffen mit <h:outputScript>
Einfügen.
<h:outputScript name="functions.js" target="head" />
Auf diese Weise müssen Sie sich nicht um XML-Sonderzeichen in Ihrem JS-Code kümmern.
Ich bin heute auf diesen Beitrag gestoßen, da ich auf das gleiche Problem gestoßen bin und das gleiche Problem hatte, dass Javascript nicht mit den oben aufgeführten CDATA-Tags ausgeführt wird. Ich habe die CDATA-Tags folgendermaßen korrigiert:
<script type="text/javascript">
//<![CDATA[
your javascript code here
//]]>
</script>
Dann hat alles perfekt geklappt!
Manchmal benötigen Sie Folgendes:
/*<![CDATA[*/
/*]]>*/
und nicht nur das:
<![CDATA[
]]>
Ich hatte einen Git-Konflikt in meiner workspace.xml, d. H.
<<<<———————HEAD
welches den unbekannten Umbaufehler verursachte. Es ist etwas ärgerlich, dass die Datei nicht benannt wird.