javascript - Error parsing XHTML: The content of elements must consist of well-formed character data or markup -
as extension of question, i'm trying insert javascript <h:commandbutton />
's onclick
property action
rendering ajax table.
what want do: selected items in list box , turn them parameters used in jsf fileservlet
. i.e. para2=value1¶m=value2¶m=value3
here's have:
<script type ="text/javascript"> function myscript() { var box = document.getelementbyid('myform:box'); var length = box.options.length; var paramstring = ""; (var = 0; < 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>
what when page loaded: javax.servlet.servletexception: error parsing /page.xhtml: error traced[line:15] content of elements must consist of well-formed character data or markup.
what doesn't trigger exception:
<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>
as add in for (var = 0; < length; i++)
or for (var = 0; < 10; i++)
page wouldn't load. why not loop?
facelets xml based view technology uses xhtml+xml generate html output. xml has 5 special characters has special treatment xml parser:
<
start of tag.>
end of tag."
start , end of attribute value.'
alternative start , end of attribute value.&
start of entity (which ends;
).
in case of <
, xml parser implicitly looking tag name , end tag >
. however, in particular case, using <
javascript operator, not xml entity. totally explains xml parsing error got:
the content of elements must consist of well-formed character data or markup.
in essence, you're writing javascript code in wrong place, xml document instead of js file, should escaping xml special characters accordingly. <
must escaped <
.
so, essentially, the
for (var = 0; < length; i++) {
must become
for (var = 0; < length; i++) {
to make xml-valid.
however, makes javascript code harder read , maintain. stated in mozilla developer network's excellent document writing javascript xhtml, should placing javascript code in character data (cdata) block. thus, in jsf terms, be:
<h:outputscript> <![cdata[ // ... ]]> </h:outputscript>
the xml parser interpret block's contents "plain vanilla" character data , not xml , hence interpret xml special characters "as-is".
but, better put js code in own js file include <script src>
, or in jsf terms, <h:outputscript>
.
<h:outputscript name="functions.js" target="head" />
this way don't need worry xml-special characters in js code.
Comments
Post a Comment