Berbagai artikel memberikan jawaban akan masalah tersebut tapi sejauh ini belum ada yang memberikan solusi yang tepat, namun tidak ada satu jawaban pun yang dapat menjelaskan penyebab mendasar masalah konkret tersebut.
Facelets adalah teknologi tampilan berbasis XML yang menggunakan XHTML + XML untuk menghasilkan output HTML. XML memiliki lima karakter khusus yang memiliki perlakuan khusus oleh parser XML:
1.
< awal dari sebuah tag.
2.
> akhir tag.
3.
" awal dan akhir dari nilai atribut.
4.
' Alternatif mulai dan berakhirnya nilai atribut.
5.
& awal entitas (yang diakhiri dengan
; ).
Dalam kasus
& yang tidak diikuti oleh
# (misalnya
 ,  , dll), parser XML secara implisit mencari salah satu dari lima nama entitas yang telah ditentukan sebelumnya
lt, gt, amp, quot, dan
apos, atau nama entitas yang ditentukan secara manual. Namun, dalam kasus khusus Anda, Anda menggunakan
& sebagai operator JavaScript, bukan sebagai entitas XML. Ini sepenuhnya menjelaskan kesalahan parsing XML yang Anda dapatkan:
The entity name must immediately follow the '&' in the entity reference
Intinya, Anda sedang menulis kode JavaScript di tempat yang salah, dokumen XML, bukan file JS, jadi anda harus menghindari semua karakter khusus XML yang sesuai. Tanda
& harus diloloskan sebagai
&.
Jadi dalam kasus anda :
Namun, ini membuat kode JavaScript sulit dibaca. Seperti yang dinyatakan dalam dokumen hebat Mozilla Developer Network Menulis JavaScript untuk XHTML, Anda harus menempatkan kode JavaScript dalam blok data karakter (CDATA). Jadi, dalam istilah JSF, itu akan menjadi:
Contonya
Parser XML akan menafsirkan konten blok sebagai data karakter "plain vanilla" dan bukan sebagai XML dan karenanya menafsirkan karakter khusus XML "apa adanya".
Tapi, jauh lebih baik dengan hanya meletakkan kode JS di file JS sendiri yang anda sertakan oleh <script src>, atau dalam istilah JSF, <h:outputScript>.
(perhatikan target =
"body"; dengan cara ini JSF akan secara otomatis membuat
<script> di bagian paling bawah
<body>, terlepas dari di mana
<h: outputScript> itu sendiri berada, dengan ini mencapai efek yang sama seperti dengan
window.onload dan
$(document).ready(); jadi anda tidak perlu menggunakannya lagi dalam skrip itu)
Dengan cara ini anda tidak perlu khawatir tentang karakter khusus XML dalam kode JS Anda. Sebagai bonus tambahan, ini memberi anda kesempatan untuk membiarkan browser cache file JS sehingga ukuran respons total lebih kecil.
No comments:
Post a Comment