vendredi 26 août 2011

Lien Actions Struts & Spring

Dans la partie Actions Struts, on va injecter des managers standards (JdbManager, I18NManager, ParameterManager, VocalManager & SystemManager).

Pour cela il faut indiquer à Struts que l'on utilise Spring, facile ! Dans le fichier struts.xml, il faut ajouter cette variable : 

<constant name="struts.objectFactory" value="org.apache.struts2.spring.StrutsSpringObjectFactory" />

indiquant à Struts d'aller chercher les Actions dans la conf Spring.

Et dans la configuration Spring, on peut alors déclarer nos actions de cette manière :

Ici je déclare une action "ParameterAction" pointant sur la classe concrète de l'action, je n'oublie pas d'indiquer l'action parente qui contiendra tous mes managers standards, ainsi toutes les actions les posséderont par héritage.

<bean id="parameterAction" class="com.homeautomate.ihm.actions.ParameterAction"  parent="abstractAction">
</bean>


<bean id="abstractAction" class="com.homeautomate.ihm.actions.AbstractAction" abstract="true" >
<property name="jdbManager" ref="jdbManager" />
<property name="parameterManager" ref="parameterManager" />
<property name="vocalManager" ref="vocalManager" />
<property name="i18nManager" ref="i18NManager" />
<property name="systemManager" ref="systemManager" />
</bean>



Petit tour dans la configuration Struts : 

<action name="parameterAction" class="parameterAction">
<result name="success">WEB-INF/jsp/panel/parameter.jsp</result>
</action>



Que va-t-il se passer lorsque j'accéderai à l'action ParamAction ?
              
1) Struts va aller chercher le bean parameterAction dans la conf Spring,
2) Spring va fournir le singleton et injecter automatiquement à la classe parente les managers standard.
3) Struts execute le corps de l'action
4) Struts trappe le retour de l'action (ex: Success) et recherche la jsp à afficher.

Concrètement le contenu de ParamAction (qui rappel, ne fait que remplir une liste de tous les paramètres contenus dans une table depuis la méthode POJO execute() )

package com.homeautomate.ihm.actions;

import java.util.List;

import com.homeautomate.bean.parameter.Parameter;
import com.opensymphony.xwork2.Action;

public class ParameterAction extends AbstractAction {

List<Parameter> parameters;
/**
*/
private static final long serialVersionUID = -8464535536069893165L;

@Override
public String execute() throws Exception {
parameters = getParameterManager().getDao().list(Parameter.class);
return Action.SUCCESS;
}

public List<Parameter> getParameters() {
return parameters;
}

public void setParameters(List<Parameter> parameters) {
this.parameters = parameters;
}
}

                           
On remarque ici, l'utilisation de getParameterManager().getDao().list(Clazz) qui permet de récupérer tous les enregs de la base.

Côté JSP : c'est tout simple : 

Pour afficher les données récupérée, Struts utilise OGNL (Parcoureur de Graph), pour résumer, Struts place le contenu de l'action dans une pile (Stack), l'objet parameters (notre liste de parametres) y est placée.

Si j'ai besoins d'un attribut d'un paramètre, il suffit d'indiquer le nom de l'attribut dans un tag struts, ex : 

// Tag itérator indiquant que l'on va itérer sur les élements de l'objet parameters présent dans la pile

<s:iterator value="parameters">
<tbody>
<tr>
// Ici on indique que l'on souhaite afficher l'id de l'élement courant.
<td><s:property value="id"/></td>
<td><s:property value="cle"/></td>
<td> <s:property value="valeur"/></td>
<td> <s:property value="commentaire"/></td>
</tr>
</tbody>
</s:iterator>

Struts inspecte donc chaque objet présent dans la pile.

Résultat 



Il ne restera donc plus qu'à ajouter les boutons modifier/delete/ajouter.

Pour démarrer le HomeAutomate depuis la GUI, il est nécessaire d'ajouter le démarrage du StartupServlet dans le fichier web.xml et c'est tout.

<servlet>
<servlet-name>StartupServlet</servlet-name>
<servlet-class>com.homeautomate.startup.StartupServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>


Aucun commentaire:

Enregistrer un commentaire