2010-11-19 15 views
0

İç içe geçmiş şablonların üst şablondan önce değerlendirildiği bir sorunum var. Sipariş sorunu nedeniyle, bu, yerleştirme konusunda ısrar eden bir etiket kitaplığıyla ilgili sorunlara neden oluyor.Apache Fayanslarında karo değerlendirme sırasını nasıl değiştirebilirim?

template.jsp

<%@page language="java" contentType="text/html; charset=utf-8" pageEncoding="UTF-8"%> 
<%@taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%> 
<%@taglib uri="http://taglibs.com/tags" prefix="s"%> 
<%System.out.println("evaluating template.jsp");%> 
<s:outer> 
    <tiles:insertAttribute name="content" /> 
</s:outer> 

content.jsp content.jsp sayfa değerlendirilir

<%@page language="java" contentType="text/html; charset=utf-8" pageEncoding="UTF-8"%> 
<%@taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%> 
<%@taglib uri="http://taglibs.com/tags" prefix="s"%> 
<tiles:insertDefinition name="template"> 
    <tiles:putAttribute name="content" /> 
     <%System.out.println("evaluating content.jsp");%> 
     <s:inner /> 
    </tiles:putAttribute> 
</tiles:insertDefinition> 

aşağıdaki çıkıştır. inner etiketi outer etiketi içinde olmalıdır çünkü

evaluating content.jsp 
evaluating template.jsp 

content.jsp sayfa başarısız oluyor. template.jsp değerlendirdikten sonra Fayans'ı content.jsp değerlendirmesini nasıl yaparım?

cevap

1

Yanlış olabilirim ama Fayansların tüm JSP'yi ayrıştırması gerektiğini düşünüyorum, bu da bunu yalnızca işlenme biçiminde yapamayacağınız anlamına gelir. Mevcut düzen, daha sonra dahili bir şablon kullanan bir hedef JSP'den geliyor. İçeriği hedef doldurma olarak şablonu belirtmek için karo tanımlarını kullanabiliriz. Bu yöntemin fayans kalıtımını daha verimli kullanmanıza izin vereceğini ve bu sorunu çözebileceğimi düşünüyorum çünkü "şablon" ikincisi değil, ikincisi oluşturulur.

Örnek: Eğer Struts2 kullanıyorsanız sana söylerdim ama şansı her çerçeveler ile vardır ... senin sonuç türü olarak bir fayans Definition belirtmelisiniz Şimdi

<tiles-definitions> 
    <definition name="myTemplate" template="/WEB-INF/jsf/template.jsp"> 
     <put-attribute name="content" value="" /> 
    </definition> 
    <definition name="content" extends="myTemplate"> 
     <put-attribute name="content" value="content.jsp" /> 
    </definition> 
</tiles-definitions> 

tiles.xml senin değil.

Şablonunuzun jsp'si aynı kalıyordu. Sayfanın herhangi fayans mantık karıştırmak için gerek şimdi var

<%@taglib uri="http://taglibs.com/tags" prefix="s"%> 
<%System.out.println("evaluating content.jsp");%> 
<s:inner /> 

Not: ve içerik jsp gibi bir şey yeniden yazılması olacaktır. İçerik sadece bu. Tiles.xml dosyasının gerçekten ihtiyaç duyduğumdan daha karmaşık olduğunu fark edersiniz ama bizim örneğimizde sadece bir 'koyma niteliğine' sahip olduğumuzu göstermek istedim ama daha karmaşık sayfalarda çok fazla ve 'myTemplate' üretebileceksiniz sadece sayfa için değil, üstbilgi ve altbilgileri ve yan çubukları da içeren bir sayfa, sayfadaki komut dosyalarını ve CSS'yi değiştirebilmenizi sağlar, ardından verilen örnekte olduğu gibi genişletebilir ve sonra yalnızca istediğiniz parçaları (genellikle Bu sadece içeriği), bu tanımı genişletebilirsiniz ... Base Layout -> Secure Layout, Base'i genişletir, ancak üstbilgiyi bir kilit simgesi içerecek şekilde değiştirir -> View_users_in_secure_layout, kullanıcıların görüntülemesi için içeriği değiştiren güvenli düzeni genişletir.

+0

Döşemelerle ilgili yaşadığınız sorun, tüm sayfa içeriğinin bir JSP sayfası - html başlık içeriği, sayfaya özel css, menü ve içerikte olmasını istiyorum. Fayansın istediğim gibi çalışmayacağı anlaşılıyor. Girdiğin için teşekkürler! –

İlgili konular