template java django jsp templates

java template processor



Herencia de plantilla JSP (6)

Viniendo de un pasado en Django, a menudo uso "herencia de plantilla", donde múltiples plantillas heredan de una base común. ¿Hay alguna manera fácil de hacer esto en JSP? Si no, hay una alternativa a JSP que hace esto (además de Django en Jython eso es :)

plantilla base

<html> <body> {% block content %} {% endblock %} </body> <html>

contenido básico

{% extends "base template" %} {% block content %} <h1>{{ content.title }} <-- Fills in a variable</h1> {{ content.body }} <-- Fills in another variable {% endblock %}

Se representará de la siguiente manera (suponiendo que conten.title es "Insertar título aquí", y content.body es "Insertar cuerpo aquí")

<html> <body> <h1>Insert title Here <-- Fills in a variable</h1> Insert Body Here <-- Fills in another variable </body> <html>


Mi tecnología de front-end web favorita de Java es Facelets. Es compatible con la mayoría de las plantillas de Django que he visto. No es tan limpio como el de Django, pero obtienes los mismos beneficios de herencia.

En lugar de Django:

Súper:

{% block content %}{% endblock %}

Sub:

{% block content %}inheriting template''s content here{% endblock %}

La sintaxis de Facelet es así:

Súper:

<ui:insert name="content"></ui:insert>

Sub:

<ui:define name="content">inheriting template''s content here</ui:define>


Otras opciones que vale la pena explorar incluyen Sitemesh , que se basa en la idea de decoradores de páginas, y Java Server Faces (JSF), que emplea componentes de interfaz de usuario basados ​​en web. Y si bien estamos hablando de un rápido desarrollo con frameworks web en la plataforma Java, lo invito a visitar Grails . Tiene la misma misión que Django; a saber, desarrollo rápido de aplicaciones web basado en la convención sobre la configuración.

Espero que no haya demasiadas sugerencias para una publicación. : o)


Probablemente quieras mirar en Tiles .

EDITAR: en una nota relacionada con los mosaicos, es posible que desee buscar en Struts . No es lo que estás buscando (eso es mosaico), pero es útil para alguien que viene de Django.


Puede hacer cosas similares usando archivos de etiquetas JSP. Crea tu propia page.tag que contiene la estructura de la página. Luego use una etiqueta <jsp:body/> para insertar el contenido.


Puede usar rapid-framework para la herencia de plantillas JSP

base.jsp

%@ taglib uri="http://www.rapid-framework.org.cn/rapid" prefix="rapid" %> <html> <head> <rapid:block name="head"> base_head_content </rapid:block> </head> <body> <br /> <rapid:block name="content"> base_body_content </rapid:block> </body> </html>

child.jsp

<%@ taglib uri="http://www.rapid-framework.org.cn/rapid" prefix="rapid" %> <rapid:override name="content"> <div> <h2>Entry one</h2> <p>This is my first entry.</p> </div> </rapid:override> <!-- extends from base.jsp or <jsp:include page="base.jsp"> --> <%@ include file="base.jsp" %>

salida

<html> <head> base_head_content </head> <body> <br /> <div> <h2>Entry one</h2> <p>This is my first entry.</p> </div> </body> </html>

código fuente

http://rapid-framework.googlecode.com/svn/trunk/rapid-framework/src/rapid_framework_common/cn/org/rapid_framework/web/tags/


El motor de Rythm Template ha implementado un enfoque elegante para la herencia de plantillas.

Así que supongamos que su plantilla de diseño (plantilla principal) se llama main.html :

<h1>@get("title", "default main page")</h1> <div id="left-panel">@render("leftPanel")<div> <div id="right-panel">@render("rightPanel")</div> <div id="main-content">@render()</div> <div id="footer"> @render("footer"){ @** * the content here is supplied if the child template failed * to provide it''s own footer implementation *@ <div class="footer">copyright 2012 ...</div> } </div>

Y aquí está su plantilla de destino:

@extends(main) @set(title: "My Cool Page") @section("leftPanel") { <ul class="menu"> ... </ul> } @section("rightPanel") { <div class="news"> ... </div> } @*** note no "footer" section supplied so the default content will be used **@ @*** the rest is for the main content **@ ...

Consulte la demo real en http://rythmengine.com/demo/testdefaultlayoutcontent

Se puede encontrar un documento completo en http://www.playframework.org/modules/rythm . Aunque está destinado a Play! Framework, la mayoría del contenido también se aplica al motor de ritmo puro sin Play! Framework.