Para HTML simple, generarlo directamente como texto. Las otras sugerencias de serialización, XML y transformaciones son excesivas.
hay bibliotecas Java para ayudar con la generación de HTML, como éstos:
- jwebutils
una librería para crear HTML 5 marcado con Java. También contiene soporte para crear marcas JSON y CSS 3.
- Jakarta Element Construction Set (ECS)
API de Java para generar elementos para varios lenguajes de marcado. Admite directamente HTML 4.0 y XML. Ahora retirado, pero a algunas personas les gusta mucho.
Pero si aprende los conceptos básicos del HTML válido, puede escribir sus propias rutinas.
En cuanto a la velocidad, se agregó la clase StringBuilder con el fin de una manipulación de cadena más rápida. La compensación no es sincronización. Eso significa que no es seguro para subprocesos. Dependiendo de cómo esté estructurado su programa, puede usar la sincronización alrededor del código haciendo la representación HTML.
Aquí hay una clase de ejemplo que acabo de preparar en Java 6, y una pequeña aplicación para ejecutarlo. Este código es solo una prueba de concepto, no está listo para la producción de horario estelar.
package com.example;
/**
* @author Basil Bourque
* © 2012 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.
*/
public class ListToHtmlTransformer {
/**
* @param collection
* of report titles.
* @return string containing source code for HTML5.
*/
public String render(java.util.Collection<String> reports) {
// This source code is not yet tested or made bullet-proof. Only meant for demonstrating concepts.
// Warning: This code is not thread-safe. Changes must be made before serious use.
// Warning: This code should be modified to produce proper HTML, such as escaping certain characters.
// This code generates minimal HTML5 as suggested here: http://www.brucelawson.co.uk/2010/a-minimal-html5-document/
// Big tip: Note that HTML allows the use of apostrophe (single-quote) in place of double-quote. Mixes better with Java source code.
// The backslash + 'n' is an escape sequence in Java to generate a linefeed (Ascii/Unicode 10) for use here as a NewLine.
// In real life, you woud test your rendered HTML with an HTML validator such as:
// • http://html5.validator.nu/
// • http://validator.w3.org/
StringBuilder html = new StringBuilder();
html.append("<!doctype html>\n");
html.append("<html lang='en'>\n");
html.append("<head>\n");
html.append("<meta charset='utf-8'>\n");
html.append("<title>Report of Reports</title>\n");
html.append("</head>\n\n");
html.append("<body>\n");
html.append("<h1>List of Reports</h1>\n");
// Make a list in HTML
html.append("<ul>\n");
// Loop the list of reports passed as argument.
for (String report : reports) {
html.append("<li>" + report + "</li>\n");
}
html.append("</ul>\n");
html.append("</body>\n\n");
html.append("</html>");
return html.toString();
}
}
Y una aplicación para ejecutarlo.
package com.example;
import java.util.ArrayList;
/**
*
* @author Basil Bourque
* © 2012 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.
*/
public class App {
/**
* @param args
*/
public static void main(String[] args) {
ArrayList<String> listOfReports = new ArrayList<String>();
listOfReports.add("Some report #1");
listOfReports.add("Some report #2");
listOfReports.add("Some report #3");
listOfReports.add("Some report #4");
listOfReports.add("Some report #5");
listOfReports.add("Some report #6");
ListToHtmlTransformer renderer = new ListToHtmlTransformer();
String renderedHtml = renderer.render(listOfReports);
System.out.println("The following HTML was rendered: " + new java.util.Date().toString());
System.out.println(renderedHtml);
System.out.println("*** End of HTML ***");
}
}
Me trataron de publicar el HTML representado aquí, pero Stackoverflow trató de interpretarlo como HTML en lugar de mostrarlo.
Consejo de bonificación: Puede utilizar comillas simples (APOSTROPHE Unicode 39) en lugar de comillas dobles (CITAS MARCAR Unicode 34) en su HTML & CSS para delimitar valores de atributos y cosas por el estilo. Los navegadores manejan bien ambos. La comilla simple hace que la codificación sea mucho más fácil en su código Java, eliminando la necesidad de escapar de las comillas dobles. Observe mi uso en el código anterior, como 'en'
y 'utf-8'
.
¿todos los clientes admiten las transformaciones del lado del cliente? – radai
No todo. Pero los navegadores web modernos sí: http://www.w3schools.com/XSL/xsl_browsers.asp –
Pensé en usar XSLT, ¿tiene alguna idea de cómo incluir las instrucciones de procesamiento en un xml generado a partir de una lista de Informes? anotado con javax.xml.bind.annotation.XmlRootElement? – Marmoy