Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JSF facelet page doesn't javascript string with '&' character

in a JSF facelet page (.xhtml) I have this javascript code

<script type="text/javascript">
        function navigateToDetail() {
            var id = document.getElementById("idElemento").value;
            alert(id);
            var isPratica = document.getElementById("isPratica").value;
            alert(isPratica);
            var box = "#{boxCtrl.idBox}";
            alert(box);             
            if (isPratica==true)
                window.location = "DettaglioRichiesta.xhtml?id=" + id + "&box=" + box;
            else
                window.location = "../Richieste/DettaglioRichiesta.xhtml?id=" + id + "&box=" + box;

        }
    </script>

It doesn't work because the jfs engine think that "&box" is relative to a bindign, and it says:

Error Parsing /Box/ListaRichieste.xhtml: Error Traced[line: 20] The reference to entity "box" must end with the ';' delimiter

I can I avoid this behaviour?

like image 341
themarcuz Avatar asked Aug 22 '11 17:08

themarcuz


1 Answers

Facelets is a XML based view technology. The & is a XML special character. It's interpreted as start of a XML entity like &nbsp;, &#160;, etc. It is therefore looking for the end character ;, but it found none, so it is throwing this error.

To represent the & literally inside a XML document, you need to use &amp; instead of &.

window.location = "DettaglioRichiesta.xhtml?id=" + id + "&amp;box=" + box;

You can also just put that JS code in its own .js file which you include by <script src> so that you don't need to fiddle with XML special characters in the JS code.

<script type="text/javascript" src="your.js"></script>
like image 156
BalusC Avatar answered Oct 19 '22 18:10

BalusC