public class MonAction extends ActionSupport implements Preparable {D'après la documentation officielle de Struts 2, pour utiliser la méthode prepare(), il faut aussi utiliser l'interceptor prepare correspondant dans votre struts.xml.
...
public void prepare() {
// En fonction des attributs recus, initialiser ici les attributs de votre action qui seront transmis à votre vue
}
}
De plus, pour que les attributs soient disponibles dans prepare(), l'astuce consiste en fait à ré appeler l'interceptor params avant prepare, comme indiqué ci-dessous :
<!-- Calls the params interceptor twice, allowing you to pre-load data for the second time parameters are set --> <action name="someAction" class="com.examples.SomeAction"> <interceptor-ref name="params"/> <interceptor-ref name="prepare"/> <interceptor-ref name="basicStack"/> <result name="success">good_result.ftl</result> </action>
Mais si vos vues contiennent des checkbox, cela n'est pas suffisant. Cela provoque en effet une erreur du genre :
OgnlValueStac W com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn Error setting expression '__checkbox_xxxx' with value '[Ljava.lang.String;@1f7c9ad'
ognl.OgnlException: target is null for setProperty(null, "xxxx", [Ljava.lang.String;@1f7c9ad)
Pour résoudre ce problème, il faut en fait aussi utiliser l'interceptor checkbox en double
<action name="someAction" class="com.examples.SomeAction"> <interceptor-ref name="checbox"/> <interceptor-ref name="params"/> <interceptor-ref name="prepare"/> <interceptor-ref name="basicStack"/> <result name="success">good_result.ftl</result> </action>