Struts2 HowTo
De Wikifago.
Version du 28 juin 2010 à 15:56 par Fabrice (discuter | contributions)
Java server page JSP
- Positionner un paramètre au niveau d'une JSP.
// Une valeur en dure
<s:set name="statusKey" value='Une valeur'/>
// Une valeur issue d'une méthode statique qui prend en entrée un parametre et 2 propriétés
<s:set name="statusKey" value='%{@com.package.static.ViewHelper@getStatusPropertyKey( #param, ConnectedUser, ConnectedUser.id )}'/>
- Utiliser le paramétre positionné (#)
<s:if test="%{'V'==status.code && !'key.refused'.equals(#statusKey)}}">
<s:checkbox theme="simple" id="productIds" name="productIds" fieldValue="%{id}"/>
</s:if>
});
- Utiliser un paramétre dans les messages internationnalisés
<s:set name="name" value='%{user.firstname + " " + user.surname}'/>
<h3>
<s:text name="tso.edit.h3">
<s:param><s:property escape="true" value="name"/></s:param>
</s:text>
</h3>
Utiliser le plugin Json de struts 2 et faire de l'ajax avec en utilisant JQuery
- Dans le fichier de mapping Xml de struts déclarer le type json comme étant org.apache.struts2.json.JSONResult.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="monPackage" extends="common" >
<result-types>
<result-type name="json" class="org.apache.struts2.json.JSONResult" />
</result-types>
<action name="monAction" class="com.xxx.yyy.action.monPackage.MonAction">
<result name="success">/jsp/monPack/maJsp.jsp</result>
<result type="json" name="ajaxResult"></result>
</action>
</package>
</struts>
- Au niveau de l'action faire une méthode qui retourne "ajaxResult".
La fonction alimente la propriété nomProduit et une map de composés, toutes les propriétés non vides seront renvoyé dans un flux Json
private Map mapComposes;
private String nomProduit;
private String code; //avec setter et getter
private String reference; //avec setter et getter
public String getDataProduit() {
if (StringUtils.isEmpty(getCode())) {
return "ajaxResult";
}
long code = new Long(getCode()).longValue();
Produit p = produitDAO.getByCode(code);
// Nom du produit associe
setNomProduit(getText(p.getLibelle()));
// Prix
getMapCompose(p);
return "ajaxResult";
}
/**
* Methode qui alimente une map des Composés du produit
*/
private void getMapCompose(Produit p) {
List<Compose> list = composeDAO.getComposeByProduct(p);
mapComposes = new HashMap<Long, String>();
Iterator<Compose> it = list.iterator();
Compose c;
while (it.hasNext()) {
c = it.next();
mapComposes.put(new Long(c.getId()),
getText(c.getLibelle()));
}
}
- Appel Ajax au niveau de la jsp avec utilisation de JQuery 1.4
La fonction getLinkedData effectue une requête ajax en appelant la méthode getDataProduit de l'action "monAction" Les propriétés "code" et reference de l'action seront positionnées avec les paramètres passés en paramètre. Les paramètres sont séparé par des virgules. Au retours le flux est mis dans le json "data". L'exemple utilise Jquery pour lister le contenu de la map et positionner un élément html dont l'id est "libelle"
function getLinkedData(code){
if (code==null)return;
$.post("<s:url value='monAction!getDataProduit.action'/>", { code: ''+code+'', reference: ''+$('#reference').val()+'' },
function(data){
try
{
var i=-1;
$.each(data.mapCompose, function(i,mapCompose){
alert(i+','+mapCompose);
});
$("#libelle").val(data.nomProduit);
}
finally {alert('final')}
});
}
