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)
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
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.