2011-01-09 12 views
15

:JSPX ile geçerli HTML nasıl üretilir? (Değil XHTML) aşağıdaki zorluklarla karşı karşıya gelecek JSPX ile bir HTML sayfası oluşturulmaya çalışılırken

  • JSPX minimize etiketleri biz, örneğin <div class="foo"></div> tarayıcılar tarafından farklı yorumlanır <div class="foo"/> olur istemiyoruz Bazı HTML etiketleri kapatılmış olarak kalmalı, örneğin <script...> gibi
  • JSPX etiketleri kapalı olmalıdır. Kendiliğinden kapalı <script.../> etiketi IE ve Firefox tarafından tanınmıyor.
  • HTML5 Doctype'ı (<!DOCTYPE html>)
  • Inline JavaScript

Bu soru hep aynı soruna aşağı kaynatın olduğunu birkaç diğer bir cevaptır belirtme. Kapsamlı bir cevap bulamadım bu yüzden bulgularımın sonucunu gönderiyorum.

İlgili sorular:

+0

JSP/JSPX eski bir teknolojidir. Facelets düşünün. İlgili: http://stackoverflow.com/questions/2935759/is-it-possible-to-use-jsffacelets-with-html-4-5 – BalusC

cevap

24

JSPX HTML ve XHTML hem üretmek için son derece uygundur. Bu dilin XML yapısını anlamak için aşağı doğru kaymaktadır. HTML değilken JSPX XML'dir. Etkilerinden biri, XML'lerin kendi kendine kapanan etiketler ve boş etiketler arasında ayrım yapmadığından, JSPX ayrıştırıcısının boş etiketleri "en aza indirgemesidir". Bu, <script...> ve <div></div> etiketlerinin sorunlarına neden olur. Bununla birlikte, JSPX dosyaları geçerli bir XML, olması gerektiği halde, ürettikleri çıktının olmadığını unutmayın. Dolayısıyla, HTML üreten bir JSPX dosyasına sahip olmak tamamen doğrudur (sadece XHTML değil). Aslında, CSV, CSS veya JS gibi herhangi bir metin çıktısı üretmek için JSPX'i kullanabilirsiniz, ancak oldukça rahatsız edici olabilir.

<html:div styleClass="foo" selfClosing="false">${message}<html:div> 

Onun HTML çıktı içerecektir: Yukarıdaki hesaba alarak

, en temiz çözüm Bu etiketler böyle kullanılabilecek vb htmlScript, htmlDiv gibi etiketleri ile özel bir taglib oluşturma gibi görünüyor içeriği ne olursa olsun kapanış etiketi,:

<div style="foo"></div> 
<div style="foo">Hello</div> 

böyle bir taglib Bunun yerine çirkin geçici çözümleri kullanmadan JSPX ile HTML sayfaları oluşturmak izin verir.

HTML sayfaları oluşturma JSPX uygulamasının en yaygın uygulamalarından biri gibi görünmektedir. Standart bir HTML kütüphanesi olmaması biraz şaşırtıcı. JSF bir tane var ama temiz JSP kullanırsanız size yardımcı olmaz. Bu boşluğu dolduran üçüncü taraf bir kütüphane olabilir, ancak bir tane bulamadım.İlgili sorularda

<![CDATA[<script type="text/javascript" src="/js/jquery-1.4.4.min.js"></script>]]> 

Diğer önerileri bir koymak vardı:

<![CDATA[<script type="text/javascript" src="/js/jquery-1.4.4.min.js">]]> 

ya: Kendi taglib kodlama gibi hissediyorum yoksa

, alternatif bir yaklaşım CDATA kullanmaktır yorum veya aynı sonucu verir <script> içi boş <jsp:text>:

<script type="text/javascript" src="/js/jquery-1.4.4.min.js"><!-- Prevent self-closing --></script> 

(Ralph belirtildiği gibi, yukarıda WebSphere ile çalışmaz) ya:

<script type="text/javascript" src="/js/jquery-1.4.4.min.js"><jsp:text></jsp:text></script> 

CDATA Ayrıca birkaç diğer durumlarda kullanışlı oluyor. Bunlardan biri HTML5 doktrinini yazdırıyor (<!DOCTYPE html>). JSPX, geçerli bir XML olmadığı için DOCTYPE bildirimini belgenize koymanıza izin vermez. JSPX ayrıca jsp: output etiketini deifnes eder, ancak boş olduğunda bile SYSTEM özelliğini yazdırır. Ilişkin bir çözüm, sayfanın başında CDATA'da DOCTYPE sarılmasıdır:

<![CDATA[<!DOCTYPE html>]]> 

CDATA da satır içi JavaScript saklanması için de kullanılabilir. Bu çünkü "<" işareti ayrıştırma hatası üretirken:

<script type="text/javascript"> 
    var x = 7 < 5; 
</script> 

bu iyi çalışır: olduğu gibi ama yine de EL ifadeleri değerlendirir JSPX içinde CDATA herşeyi çıktılar

<script type="text/javascript"> 
    <![CDATA[ 
    var x = 7 < 5; 
    ]]> 
</script> 

Not. Böylece aşağıdaki:

<![CDATA[ 
<jsp:expression>"asd " + "def"</jsp:expression> 
${1 + 2} 
]]> 

üretir:

<jsp:expression>"asd " + "def"</jsp:expression> 
3 

Umut bu yardımcı olur :)

+1

- Websphere için çalışmıyor – Ralph

+0

İkinci etiketi bir kapatma etiketi mi olmalı?? Jspx ile aşina değilim. – mwcz

+1

"" yerine sadece "" yeterli olacağını unutmayın. –

0

önerilen yol:

< script type = "text/javascript" >

// <! [CDATA [

//your javascript goes here 
    function myFuncy(){ 
     if(a > b || a >= b && b && c){ 
      X; 
     } 
    } 

//]] >

</script >

İlgili konular