[Résolu] Supprimer un onglet du Navigator

cancel
Showing results for 
Search instead for 
Did you mean: 
Highlighted
Member II

[Résolu] Supprimer un onglet du Navigator

J’ai actuellement besoin de supprimer l'onglet "Mon Alfresco" dans le Navigator du webclient Alfresco.

J'ai pu assez rapidement m'apercevoir que cette modif pouvait se faire dans le component JSF UINavigator déclaré dans le fichier /WEB-INF/faces-config-repo.xml

Pour cela il me faudrait supprimer les morceaux de code suivants par rapport à la classe d'origine :

else
{
treePanel = false;
areaTitle = Application.getMessage(context, NavigationBean.MSG_MYALFRESCO);
}

et

if (NavigationBean.LOCATION_MYALFRESCO.equals(area) == false)
{
encodeSidebarButton(context, out, sideBarStyle, NavigationBean.LOCATION_MYALFRESCO, NavigationBean.MSG_MYALFRESCO);
}

Ensuite, j'ai bien évidemment eu besoin de pouvoir recompiler ma classe "customisée" avant même de pouvoir la placer dans mon module et de l'injecter dans mon .war et le problème est là…
Cette classe (UINavigator) étend d'une autre classe (SelfRenderingComponent) que je ne retrouve nul part dans le SDK d'alfresco (même dans le projet SDK AlfrescoEmbedded).
En faisant une petite recherche sous Eclipse en ayant inclus mon serveur Tomcat sur lequel mon Alfresco est déployé, j'ai pu constater que cette classe serait apparemment présente dans un jar nommé alfresco-webscript-framework.jar.

J'ai donc supprimé les morceaux de code de la classe UINavigator.java qui m'intéressaient, j'ai laissé Eclipse la recompiler avec les erreurs pensant que de toute manière une fois tout déployé sur mon serveur il retrouverait cette classe (SelfRenderingComponent) dans le classpath complet d'Alfresco, je l'ai ensuite packagée dans mon module et injectée dans mon war.
Cependant, au lancement de mon serveur, j'ai finalement l'erreur suivante :

3 juin 2010 11:16:44 org.apache.catalina.core.StandardContext listenerStart
GRAVE: Exception lors de l'envoi de l'�v�nement contexte initialis� (context initialized) � l'instance de classe d'�coute (listener) org.apache.myfaces.webapp.StartupServletContextListener
java.lang.NoClassDefFoundError: SelfRenderingComponent
   at java.lang.ClassLoader.defineClass1(Native Method)
   at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
   at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
   at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1847)
   at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:890)
   at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1354)
   at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
   at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
   at java.lang.Class.forName0(Native Method)
   at java.lang.Class.forName(Class.java:247)
   at org.apache.myfaces.shared_impl.util.ClassUtils.classForName(ClassUtils.java:134)
   at org.apache.myfaces.shared_impl.util.ClassUtils.simpleClassForName(ClassUtils.java:160)
   at org.apache.myfaces.application.ApplicationImpl.addComponent(ApplicationImpl.java:272)
   at org.apache.myfaces.config.FacesConfigurator.configureApplication(FacesConfigurator.java:608)
   at org.apache.myfaces.config.FacesConfigurator.configure(FacesConfigurator.java:148)
   at org.apache.myfaces.webapp.StartupServletContextListener.initFaces(StartupServletContextListener.java:68)
   at org.apache.myfaces.webapp.StartupServletContextListener.contextInitialized(StartupServletContextListener.java:51)
   at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3843)
   at org.apache.catalina.core.StandardContext.start(StandardContext.java:4342)
   at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
   at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
   at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
   at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:830)
   at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:719)
   at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:490)
   at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1149)
   at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
   at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
   at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
   at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
   at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
   at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
   at org.apache.catalina.core.StandardService.start(StandardService.java:516)
   at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
   at org.apache.catalina.startup.Catalina.start(Catalina.java:578)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:597)
   at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
   at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: java.lang.ClassNotFoundException: SelfRenderingComponent
   at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
   at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
   at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
   … 41 more
3 juin 2010 11:16:44 org.apache.catalina.core.ApplicationContext log
INFO: Set web app root system property: 'webapp.root' = [D:\Alfresco\tomcat\webapps\alfresco\]
3 juin 2010 11:16:45 org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring root WebApplicationContext

Quelqu'un serai-t-il en mesure de me donner un petit coup de pouce pour arriver à la solution ?

Pour être plus précis, je tiens à rajouter que je travail sur une version 3.0 Labs Stable d'Alfresco sur un poste Windows XP et en local tout simplement.

Au cas où certains me poseraient également la question de savoir où est-ce que j'ai intégré ma classe dans mon AMP, j'ai effectué plusieurs tests :

- j'ai simplement copier/coller la classe d'origine d'Alfresco et donc conservé les même noms de classe et de package et intégré celle-ci dans le jar que contient mon AMP (pour tenter au final d'écraser la classe d'origine au lancement d'Alfresco).

- j'ai également essayé de surcharger la configuration JSF d'origine en créant un fichier faces-config-custom.xml contenant les informations suivantes :

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
                              "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
<faces-config>

   <!– ==================== COMPONENTS ==================== –>
   <component>
      <component-type>org.alfresco.faces.Navigator</component-type>
      <component-class>org.alfresco.web.ui.repo.component.UINavigatorCustom</component-class>
   </component>

</faces-config>

afin de tenter d'écraser la configuration de ce composant contenu dans le fichier faces-config-repo.xml

J'ai obtenu la même erreur dans les 2 cas et pourtant je pense n'être vraiment pas très loin du but, si quelqu'un sait vraiment comment procéder pour recompiler cette classe je suis preneur.

Merci par avance.
2 Replies
Active Member

Re: [Résolu] Supprimer un onglet du Navigator

Bonjour,

Le fait que le JAR alfresco-webscript-framework.jar manque dans le SDK de la v3.0 est un bug connu (il manque aussi dans la v3.1). Pour le contourner il suffit d'aller piocher ce JAR (et un autre qui manque aussi je crois) dans le répertoire WEB-INF/lib d'une installation Alfresco opérationnelle (et de la même version, évidement) pour le mettre dans le CLASSPATH Eclipse. Ainsi, il sera possible de recompiler la classe custom.
Highlighted
Member II

Re: [Résolu] Supprimer un onglet du Navigator

Merci beaucoup pour cette réponse, j'ai enfin pu parvenir à ma première customisation en touchant un tant soit peu au code source d'Alfresco… youpi (je suis vraiment content parce que ça faisait un paquet de temps que j'étais sur le sujet de cette customisation du UINavigator  Smiley Very Happy)

PS : cela dit en passant également, même sans savoir que c'était un bug, j'aurai pu y penser, j'ai été nul sur le coup  Smiley Surprisedops: