SORU
18 AĞUSTOS 2009, Salı


Şablon oluşturma kolaylaştırmak için JSP hileler?

İş yerinde JSP basit bir proje içinde HTML dosyaları bir sürü dönüm ile görevli oldum. Gerçekten statik, programa sunucu taraflı mantık. Java için tamamen yeni olduğumu belirtmeliyim. JSP dosyaları gibi yapmak kolay iş ile ortak içerir ve Değişkenler gibi PHP, ama bilmek istiyorum basit bir yol almak gibi bir şey şablon kalıtım (Django tarzı) ya da en azından güçlü bir temel.jsp dosya üstbilgi ve altbilgi içeren, daha sonra içerik eklemek istiyorum.

Ben Sebep Olmuşcevabı burada:bazı umut vaat ediyor gibi görünüyor JSP template inheritance Birisi bunu başarmak için nasıl açıklar?

Düşününce ben pek zaman bence dinamik yönlendirme, biraz çok, çok mutluyum için sadece URL göster doğrudan üzerine .jsp dosyaları, ama ben açmak için öneri.

Teşekkürler.

düzenleme:Kendim için bir öğrenme eğrisi ve proje üzerinde çalışan diğer artıracak, çünkü herhangi bir harici kütüphaneleri kullanmak istemiyorum, ve çalıştığım şirket bunu yapmak için anlaşma yaptı.

Başka bir edit:Eğer JSP tags içeriğim gerçekten herhangi bir şablon değişkenleri olmadığı için yararlı olacak mı emin değilim. İhtiyacım olan şey bunu yapabilmek için bir yoldur:

base.html:

<html><body>
{ content.body }
</body></html>

somepage.html

<wrapper:base.html>
<h1>Welcome</h1>
</wrapper>

çıkış:

<html><body>
<h1>Welcome</h1>
</body></html>

Bu bana yeterli ben gereken her şeyi yapmak için çok yönlülük vereceğini düşünüyorum. includes ile elde etmiş olabilir ama bir üst gerekir ve bir alt tür dağınık ve her kapsayıcı için vardır.

CEVAP
15 Temmuz 2010, PERŞEMBE


Skaffman de belirtildiği gibiJSP 2.0 Etiket Dosyalarıbu arı diz.

Bu basit örnek alalım.

WEB-INF/tags/wrapper.tag aşağıdaki koyduk

<%@tag description="Simple Wrapper Tag" pageEncoding="UTF-8"%>
<html><body>
  <jsp:doBody/>
</body></html>

example.jsp sayfa: şimdi

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="t" tagdir="/WEB-INF/tags" %>

<t:wrapper>
    <h1>Welcome</h1>
</t:wrapper>

O senin düşündüğün şeyi yapıyor.


Yani, bir şey için bu konuya biraz daha genel genişletin sağlar. WEB-INF/tags/genericpage.tag

<%@tag description="Overall Page template" pageEncoding="UTF-8"%>
<%@attribute name="header" fragment="true" %>
<%@attribute name="footer" fragment="true" %>
<html>
  <body>
    <div id="pageheader">
      <jsp:invoke fragment="header"/>
    </div>
    <div id="body">
      <jsp:doBody/>
    </div>
    <div id="pagefooter">
      <jsp:invoke fragment="footer"/>
    </div>
  </body>
</html>

Bu kullanmak için:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="t" tagdir="/WEB-INF/tags" %>

<t:genericpage>
    <jsp:attribute name="header">
      <h1>Welcome</h1>
    </jsp:attribute>
    <jsp:attribute name="footer">
      <p id="copyright">Copyright 1927, Future Bits When There Be Bits Inc.</p>
    </jsp:attribute>
    <jsp:body>
        <p>Hi I'm the heart of the message</p>
    </jsp:body>
</t:genericpage>

Bunu alır mısın? Çok çok ama çok daha iyi


WEB-INF/tags/userpage.tag

<%@tag description="User Page template" pageEncoding="UTF-8"%>
<%@taglib prefix="t" tagdir="/WEB-INF/tags" %>
<%@attribute name="userName" required="true"%>

<t:genericpage>
    <jsp:attribute name="header">
      <h1>Welcome ${userName}</h1>
    </jsp:attribute>
    <jsp:attribute name="footer">
      <p id="copyright">Copyright 1927, Future Bits When There Be Bits Inc.</p>
    </jsp:attribute>
    <jsp:body>
        <jsp:doBody/>
    </jsp:body>
</t:genericpage>

Bu kullanın: (istek kullanıcı bir değişken vardır)

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="t" tagdir="/WEB-INF/tags" %>

<t:userpage userName="${user.fullName}">
  <p>
    First Name: ${user.firstName} <br/>
    Last Name: ${user.lastName} <br/>
    Phone: ${user.phone}<br/>
  </p>
</t:userpage>

Ama diğer yerlerde bu kullanıcı detay bloğu kullanmak gibi çıkıyor. Bu yüzden, onu yeniden yapacağız. WEB-INF/tags/userdetail.tag

<%@tag description="User Page template" pageEncoding="UTF-8"%>
<%@tag import="com.example.User" %>
<%@attribute name="user" required="true" type="com.example.User"%>

First Name: ${user.firstName} <br/>
Last Name: ${user.lastName} <br/>
Phone: ${user.phone}<br/>

Şimdi bir önceki örnek olur:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="t" tagdir="/WEB-INF/tags" %>

<t:userpage userName="${user.fullName}">
  <p>
    <t:userdetail user="${user}"/>
  </p>
</t:userpage>

JSP Tag dosyaları güzelliği temelde genel işaretleme etiketi ve sizin içerik için onu yeniden sonra izin vermesidir.

JSP Tag Files hemen hemen Tiles vb. gibi şeyler ele geçirmiş en azından benim için. Onları çok daha kolay sadece yapı sana ne olarak kullanmak için bulmak, hiçbir şey önyargılı. Artı diğer şeyler (kullanıcı detay parçası yukarıdaki gibi) için JSP tag dosyaları kullanabilirsiniz.

İşte yaptığım DisplayTag benzer bir örnek, ama bu tüm Tag Dosyaları ile yapılır (Stripes çerçeve, s: etiketler..). Satır, alternatif renkleri, sayfa tablosu bu sonuçlara navigasyon, vb.:

<t:table items="${actionBean.customerList}" var="obj" css_class="display">
  <t:col css_class="checkboxcol">
    <s:checkbox name="customerIds" value="${obj.customerId}"
                onclick="handleCheckboxRangeSelection(this, event);"/>
  </t:col>
  <t:col name="customerId" title="ID"/>
  <t:col name="firstName" title="First Name"/>
  <t:col name="lastName" title="Last Name"/>
  <t:col>
    <s:link href="/Customer.action" event="preEdit">
      Edit
      <s:param name="customer.customerId" value="${obj.customerId}"/>
      <s:param name="page" value="${actionBean.page}"/>
    </s:link>
  </t:col>
</t:table>

Elbette etiketleri JSTL tags (c:eğer, vb.) ile çalışır. Etiket bünyesinde yapamayacağın tek şey etiket, java komut dosyası uygulamacığı kodu ekleyin dosya, ama bu düşündüğün gibi bir sınırlama olarak değil. Eğer komut dosyası uygulamacığı şeyler lazım olursa, ben sadece mantığı bir etiket koymak ve etiketi bırakın. Kolay.

Yani, etiket dosyaları hemen hemen istediğiniz herhangi bir şey olabilir. En temel düzeyde, basit kes ve yapıştır yeniden düzenleme. Düzeni bir parça al, kes şunu, bazı basit prosedür ve etiket çağırma ile değiştirin.

Yapabileceğiniz daha yüksek bir düzeyde bu tablo gibi sofistike şeyler var tag.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AFISHAL

    AFISHAL

    7 Mart 2009
  • Dopelives

    Dopelives

    30 Temmuz 2009
  • RickardRick

    RickardRick

    9 Mart 2007