Creación de un plugin con struts xml dom

0

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

Escribe un comentario