Vistas XSLT

Disponible

XSLT es un lenguaje de transformación XML que es popular como tecnología de presentación en aplicaciones web. XSLT puede ser una buena elección como tecnología de presentación si su aplicación funciona de forma natural con XML o si su modelo se puede convertir fácilmente a XML. La siguiente sección muestra cómo crear un documento XML como datos de modelo y transformarlo usando XSLT en una aplicación Spring Web MVC.

Este ejemplo es una aplicación Spring simple que crea una lista de palabras en un Controller y las agrega a un mapa modelo. Se devuelve un mapa, así como el nombre de nuestra vista XSLT. El controlador XSLT convierte una lista de palabras en un documento XML simple listo para la transformación.

Frijoles

La configuración es estándar para una aplicación web Spring simple: la configuración MVC debe definir el bean XsltViewResolver y la configuración habitual de anotaciones MVC. El siguiente ejemplo muestra cómo hacer esto:

Java
@EnableWebMvc
@ComponentScan
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Bean
    public XsltViewResolver xsltViewResolver() {
        XsltViewResolver viewResolver = new XsltViewResolver();
        viewResolver.setPrefix("/WEB-INF/xsl/");
        viewResolver.setSuffix(".xslt");
        return viewResolver;
    }
}
Kotlin
@EnableWebMvc
@ComponentScan
@Configuration
class WebConfig : WebMvcConfigurer {
    @Bean
    fun xsltViewResolver() = XsltViewResolver().apply {
        setPrefix("/WEB-INF/xsl/")
        setSuffix(".xslt")
    }
}

Controlador

También necesitamos un controlador que encapsule nuestra lógica de generación de palabras.

La lógica del controlador está contenida en una clase marcada con la anotación @Controller y el método del controlador se define de la siguiente manera:

Java
@Controller
public class XsltController {
    @RequestMapping("/")
    public String home(Model model) throws Exception {
        Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
        Element root = document.createElement("wordList");
        List<String> words = Arrays.asList("Hello", "Spring", "Framework");
        for (String word : words) {
            Element wordNode = document.createElement("word");
            Text textNode = document.createTextNode(word);
            wordNode.appendChild(textNode);
            root.appendChild(wordNode);
        }
        model.addAttribute("wordList", root);
        return "home";
    }
}
Kotlin
import org.springframework.ui.set
@Controller
class XsltController {
    @RequestMapping("/")
    fun home(model: Model): String {
        val document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument()
        val root = document.createElement("wordList")
        val words = listOf("Hello", "Spring", "Framework")
        for (word in words) {
            val wordNode = document.createElement("word")
            val textNode = document.createTextNode(word)
            wordNode.appendChild(textNode)
            root.appendChild(wordNode)
        }
        model["wordList"] = root
        return "home"
    }
}

Hasta ahora solo hemos creado un documento DOM y lo hemos agregado al mapa modelo. Tenga en cuenta que también puede cargar un archivo XML como Resource y usarlo en lugar de un documento DOM personalizado.

Hay paquetes de software que automáticamente "DOMifican" un gráfico de objetos, pero Spring proporciona total flexibilidad para crear el DOM a partir de su modelo de la forma que elija. Esto ayuda a evitar que la transformación XML desempeñe un papel demasiado importante en la estructura de datos de su modelo, lo cual es un peligro cuando se utilizan herramientas para administrar el proceso de DOMificación.

Transformar

Finalmente, XsltViewResolver resuelve el archivo de plantilla XSLT de inicio y concatena el documento DOM en él para crear nuestra vista. Como se muestra en la configuración XsltViewResolver, las plantillas XSLT se ejecutan en un archivo war en el directorio WEB-INF/xsl y tienen la extensión de archivo xslt.

El siguiente ejemplo muestra una transformación XSLT:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" omit-xml-declaration="yes"/>
    <xsl:template match="/">
        <html>
            <head><title>Hello!</title></head>
            <body>
                <h1>My First Words</h1>
                <ul>
                    <xsl:apply-templates/>
                </ul>
            </body>
        </html>
    </xsl:template>
    <xsl:template match="word">
        <li><xsl:value-of select="."/></li>
    </xsl:template>
</xsl:stylesheet>

La transformación anterior se representa como el siguiente HTML:

<html>
    <head>
        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Hello!</title>
    </head>
    <body>
        <h1>My First Words</h1>
        <ul>
            <li>Hello</li>
            <li>Spring</li>
            <li>Framework</li>
        </ul>
    </body>
</html>
Comentarios
  • Populares
  • Nuevas
  • Antiguas
Debes iniciar sesión para dejar un comentario
Esta página aún no tiene comentarios