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.

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)
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
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>
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
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();
            }
        }
    }
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
private void unfreeze(PlugInConfig theConfig) throws Exception
{
    Field field = theConfig.getClass().getDeclaredField("configured");
    field.setAccessible(true);
    field.setBoolean(theConfig, true);
}
ce n'est pas jojo, et surtout, ca ne marche pas, car c'est le addProperty qui lance l'exception frozen.

une idée ?