Bonjour,
je chercher à charger dynamiques des bouts de tiles-defs.xml au démarrage de l'application.
je me heurte à de nbx problèmes, en particulier la possibilité de modifier le PlugInConfig : il est gelé ("frozen"), cf la variable "configured" de PlugInConfig de tiles qui est passée à true à l'init.
notre RequestProcessor a été redéfinit et hérite du TilesRequestProcessor : cela implique qu'on ne peut pas enlever la déclaration du pluggin tiles dans le struts config, sinon exception :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Configuration is frozen java.lang.IllegalStateException: Configuration is frozen at org.apache.struts.config.PlugInConfig.addProperty(PlugInConfig.java:87)
le but est d'ajouter un fichier tiles-def au fichier déjà déclaré dans le struts-config :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <plug-in className="org.apache.struts.tiles.TilesPlugin"> <set-property property="definitions-config" value="/WEB-INF/config/tiles-defs.xml" /> <set-property property="moduleAware" value="true" /> </plug-in>
je suis assez mauvais en Reflexion, et je voulais modifier directement la variable configured de la sorte :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 private void chargeTilesPriv(ActionMapping theMapping) { PlugInConfig[] tabConfig = theMapping.getModuleConfig().findPlugInConfigs(); for (int i = 0; i < tabConfig.length; i++) { PlugInConfig config = tabConfig[i]; if (config.getClassName().equals("org.apache.struts.tiles.TilesPlugin")) { try { unfreeze(config); } catch (Exception e) { LOGGER.error(e); LOGGER.error("Impossible de modifier le param configured de PlugInConfig"); } config.addProperty(DEFINITIONS_CONFIG, TILES_DEFS_PRIV); config.freeze(); } } }
ce n'est pas jojo, et surtout, ca ne marche pas, car c'est le addProperty qui lance l'exception frozen.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 private void unfreeze(PlugInConfig theConfig) throws Exception { Field field = theConfig.getClass().getDeclaredField("configured"); field.setAccessible(true); field.setBoolean(theConfig, true); }
une idée ?
Partager