Por admin | Para la categoría de struts | noticia del 23-05-2010
Tutorial de struts para la creación de un plugin en struts
Struts nos permite la creación de plugins propios, en los diferentes post utilizabamos plugins standard como struts-validator y struts-tiles. Pero también se pueden crear plugins a medida de nuestras necesidades
Tenemos un fichero xml, donde tenemos una estructura un elemento nodo raiz llamado plantilla y una serie de nodos hijos llamados obrero, cada elemento hijo consta de un atributo nombre y dos elementos subhijos cargo y edad
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?xml version="1.0" encoding="UTF-8"?> <plantilla> <obrero nombre="pepe"> <cargo>peón</cargo> <edad>25</edad> </obrero> <obrero nombre="juan"> <cargo>capataz</cargo> <edad>46</edad> </obrero> <obrero nombre="maria"> <cargo>pintor</cargo> <edad>38</edad> </obrero> </plantilla> |
Este fichero xml lo denominamos plantillas.xml y será el fichero que lea el plugin de struts.
Para la creación del plugin debemos de declararlo en el fichero struts-config.xml
1 2 3 4 5 6 7 | <!-- =============================================== Plug Ins Configuration --> <plug-in className="acciones.PluginEjemplo"> <set-property property="direccion" value="/WEB-INF/plantilla.xml"/> </plug-in> |
Por un lado tenemos el nombre el de la clase del plugin, en el valor del atributo className y por otro el valor de la propiedad dirección en el que indicamos la ruta a la dirección del fichero xml
La clase que implementa la interface Plugin, debe implementar los métodos init y destroy, si se pasan parámetros en la declaración del plugin en este caso dirección con el valor de la ruta al fichero para poder asignar valor y recuperar desde la clase del plugin es necesario crear métodos getter y setter
El resto de los métodos son los encargados de leer el fichero xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 | package acciones; import java.io.File; import java.io.IOException; import javax.servlet.ServletContext; import javax.servlet.ServletException; import org.apache.struts.action.PlugIn; import org.apache.struts.action.ActionServlet; import org.apache.struts.config.ModuleConfig; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.ParserConfigurationException; import vo.Obrero; import java.util.ArrayList; public class PluginEjemplo implements PlugIn { private static final String nombreclase = PluginEjemplo.class.getName(); private String direccion; private Document documento; private static ArrayList<Obrero> listadoObreros = new ArrayList<Obrero>(); public String getDireccion() { return direccion; } public void setDireccion(String direccion) { this.direccion = direccion; } public void init (ActionServlet servlet, ModuleConfig config) throws ServletException { ServletContext contexto = servlet.getServletContext(); System.out.println(nombreclase+"direccion:"+getDireccion()); PluginEjemplo pluginejemplo = new PluginEjemplo(); leerXml (getDireccion(),servlet); contexto.setAttribute(nombreclase,pluginejemplo ); } public void leerXml(String direccion, ActionServlet servlet) { DocumentBuilderFactory factoria = DocumentBuilderFactory.newInstance(); try { DocumentBuilder constructor = factoria.newDocumentBuilder(); ServletContext contexto = servlet.getServletContext(); String lugar = contexto.getRealPath(direccion); documento = constructor.parse(new File(lugar)); documento.getDocumentElement().normalize(); Node nodoraiz = documento.getDocumentElement(); new ArrayList<Obrero>(); System.out.println(nodoraiz.getNodeName()); nodos(documento); } catch (ParserConfigurationException ex) { System.out.println("no se puede crear el Dom parser:"+ex); } catch (SAXException ex) { System.out.print("Generar Sax excepción: "+ex); } catch (IOException ex) { System.out.print("Io excepción: "+ex); } } private void nodos (Document documento) { NodeList listadenodos = documento.getElementsByTagName("obrero"); for (int i= 0; i < listadenodos.getLength() ; i++) { Node nodo = listadenodos.item(i); Obrero obrero = new Obrero(); if (nodo.getNodeType() == Node.ELEMENT_NODE) { Element elemento = (Element) nodo; obrero.setNombre(elemento.getAttribute("nombre")); obrero.setCargo(getValor("cargo",elemento)); obrero.setEdad(Integer.parseInt(getValor("edad",elemento))); } listadoObreros.add(obrero); } } private String getValor (String cadenatag, Element elemento) { NodeList listado = elemento.getElementsByTagName(cadenatag).item(0).getChildNodes(); Node nodo = listado.item(0); return nodo.getNodeValue(); } public static ArrayList<Obrero> getListado() { return listadoObreros; } public void destroy () { System.out.println("Fin del plugin"); } } |
Clase obrero
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | package vo; public class Obrero { private String nombre; private int edad; private String cargo; public String getNombre() { return nombre; } public void setNombre(String nombre) { this.nombre = nombre; } public int getEdad() { return edad; } public void setEdad(int edad) { this.edad = edad; } public String getCargo() { return cargo; } public void setCargo(String cargo) { this.cargo = cargo; } } |
Configuración del action en struts-config.xml
1 2 3 4 5 6 7 8 9 10 | <action path="/crearplugin" type="acciones.AccionRecogerObreros"> <forward name="satisfactorio" path="/pages/listadoobreros.jsp" /> </action> |
Resultado final

