custom:development_creazione_nuovo_menu_terzo_livello_leafitem

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Entrambe le parti precedenti la revisione Revisione precedente
Prossima revisione
Revisione precedente
custom:development_creazione_nuovo_menu_terzo_livello_leafitem [2023/03/10 10:39]
giorgio.scali
custom:development_creazione_nuovo_menu_terzo_livello_leafitem [2023/03/10 10:43] (versione attuale)
giorgio.scali
Linea 1: Linea 1:
 ======Creazione Nuovo Menu Terzo Livello (leafItem)====== ======Creazione Nuovo Menu Terzo Livello (leafItem)======
  
-**In Generale**+=== In Generale ​===
  
 In Geoweb, un menu di terzo livello, è una particolare tipologia di menu. Più menu di terzo livello (da ora in poi TLM, //Third Level Menu//) sono collegati gerarchicamente ad un unico menu di secondo livello (da ora in poi SLM, //Second Level Menu//). In Geoweb, un menu di terzo livello, è una particolare tipologia di menu. Più menu di terzo livello (da ora in poi TLM, //Third Level Menu//) sono collegati gerarchicamente ad un unico menu di secondo livello (da ora in poi SLM, //Second Level Menu//).
Linea 12: Linea 12:
 Esempio: Esempio:
 <code xml> <code xml>
-    ​<​accordionPaneItem name="​slm1"​ label="​Second Level Menu Item" image=""​ type="​leafItemContainer">​ +<​accordionPaneItem name="​slm1"​ label="​Second Level Menu Item" image=""​ type="​leafItemContainer">​ 
-        <​leafItem name="​tlm1"​ label="​Thirdd Level Menu Item" image=""​ type="​gwClassList">​+    <​leafItem name="​tlm1"​ label="​Thirdd Level Menu Item" image=""​ type="​gwClassList">​
         <​parameter name="​gwClassName"​ value="​class_name"></​parameter>​         <​parameter name="​gwClassName"​ value="​class_name"></​parameter>​
     </​leafItem>​     </​leafItem>​
-    ​</​accordionPaneItem> ​+</​accordionPaneItem> ​
 </​code>​ </​code>​
  
Linea 36: Linea 36:
 Altre tipologie di leafItem sono definite dai vari //plugin// di Geoweb, ed è previsto un meccanismo per poter facilmente crearne di nuove. Altre tipologie di leafItem sono definite dai vari //plugin// di Geoweb, ed è previsto un meccanismo per poter facilmente crearne di nuove.
  
-*** Nuovo LeafItem ​***+=== Nuovo LeafItem ​===
  
 Per definire una nuova tipologia di leafItem semplicemente popolare l'​attributo //type// del tag //​leafItem//​ con un valore univoco. Per definire una nuova tipologia di leafItem semplicemente popolare l'​attributo //type// del tag //​leafItem//​ con un valore univoco.
 Esempio per un ipotetico leafItem di type gwPluginType:​ Esempio per un ipotetico leafItem di type gwPluginType:​
- +<code xml> 
-     ​<​accordionPaneItem name="​slm1"​ label="​Second Level Menu Item" image=""​ type="​leafItemContainer">​ +<​accordionPaneItem name="​slm1"​ label="​Second Level Menu Item" image=""​ type="​leafItemContainer">​ 
-         ​<​leafItem name="​tlm1"​ label="​Thirdd Level Menu Item" image=""​ type="​gwPluginType"> ​        +    <​leafItem name="​tlm1"​ label="​Thirdd Level Menu Item" image=""​ type="​gwPluginType"> ​        
-         ​</​leafItem>​ +    </​leafItem>​ 
-     ​</​accordionPaneItem>​+</​accordionPaneItem
 +</code>
  
 In risposta al click su un leafItem, di norma viene aperta una specifica scheda (fanno eccezione solo particolari tipi di leafItem, gestiti ad hoc, come gwAction). In risposta al click su un leafItem, di norma viene aperta una specifica scheda (fanno eccezione solo particolari tipi di leafItem, gestiti ad hoc, come gwAction).
Linea 53: Linea 54:
   * per **contenuto** la //pagina jsp del modelAndView Spring// ritornato dal controller mappato come nell'​esempio sotto. I parametri //​projectType//​ e //​projectName//​ vengono aggiunti in automatico. Il controller Wrapper non rimanda alla jsp con il contenuto vero e proprio, ma ad un contenitore,​ specifico per ogni projectType,​ che a sua volta si occuperà di recuperare il contenuto della scheda tramite //​wrappedPageAddress//​ ( corredato da  eventuali parametri di //POST//), che è mappato da Sprimg MVC al controller sottostante gwPluginType. Questo modus operandi prevede che ci siano per ogni tipologia di leafItem che apre un tab, un file .jsp wrapper per ogni tipologia di progetto (attualmente GeoManger e GeoExplorer). Ci sono apposite cartelle di tipo progetto sotto jsp/ per ospitare questi wrapper.   * per **contenuto** la //pagina jsp del modelAndView Spring// ritornato dal controller mappato come nell'​esempio sotto. I parametri //​projectType//​ e //​projectName//​ vengono aggiunti in automatico. Il controller Wrapper non rimanda alla jsp con il contenuto vero e proprio, ma ad un contenitore,​ specifico per ogni projectType,​ che a sua volta si occuperà di recuperare il contenuto della scheda tramite //​wrappedPageAddress//​ ( corredato da  eventuali parametri di //POST//), che è mappato da Sprimg MVC al controller sottostante gwPluginType. Questo modus operandi prevede che ci siano per ogni tipologia di leafItem che apre un tab, un file .jsp wrapper per ogni tipologia di progetto (attualmente GeoManger e GeoExplorer). Ci sono apposite cartelle di tipo progetto sotto jsp/ per ospitare questi wrapper.
  
-     @RequestMapping(value = "​{projectType}/​{projectName}/​gwPluginTypeWrapper",​ method = RequestMethod.POST,​ produces = "​text/​html;​ charset=utf-8"​) +<code java> 
-     ​@ResponseBody +@RequestMapping(value = "​{projectType}/​{projectName}/​gwPluginTypeWrapper",​ method = RequestMethod.POST,​ produces = "​text/​html;​ charset=utf-8"​) 
-     ​public ModelAndView gwPluginTypeWrapper(+@ResponseBody 
 +public ModelAndView gwPluginTypeWrapper(
      ​@PathVariable String projectType,​      ​@PathVariable String projectType,​
      ​@PathVariable String projectName,​      ​@PathVariable String projectName,​
      ​@RequestBody HashMap<​String,​ Object> hashMap,      ​@RequestBody HashMap<​String,​ Object> hashMap,
      ​Locale locale      ​Locale locale
-     ){ +){ 
-        ModelAndView modelAndView = null; +     ​ModelAndView modelAndView = null; 
      try{      try{
-     String projectTypePath = projectType.toLowerCase();​ +          ​String projectTypePath = projectType.toLowerCase();​ 
-     ​modelAndView = new ModelAndView(projectTypePath+"/​gwPluginTypeWrapper"​);​ +          modelAndView = new ModelAndView(projectTypePath+"/​gwPluginTypeWrapper"​);​ 
-     ​String param1= (String) hashMap.get("​param1"​);​ +          String param1= (String) hashMap.get("​param1"​);​ 
-     ​String wrappedPageAddress = projectType+"/"​+projectName+"/​gwPluginType.html";​ +          String wrappedPageAddress = projectType+"/"​+projectName+"/​gwPluginType.html";​ 
-     ​modelAndView.addObject("​wrappedPageAddress",​ wrappedPageAddress);​ +          modelAndView.addObject("​wrappedPageAddress",​ wrappedPageAddress);​ 
-     ​modelAndView.addObject("​param1",​ param1);+          modelAndView.addObject("​param1",​ param1);
      ​}catch(Exception e){      ​}catch(Exception e){
-     log.error(e.getMessage(),​ e); +          ​log.error(e.getMessage(),​ e); 
-     ​//throw e; +          //throw e; 
-     ​//return a message to client +          //return a message to client 
-     ​modelAndView = new ModelAndView("​commons/​emptyPageWithDialogErrorMessage"​);​ +          modelAndView = new ModelAndView("​commons/​emptyPageWithDialogErrorMessage"​);​ 
-     ​String dialogMessage = e.getMessage();​ +          String dialogMessage = e.getMessage();​ 
-     ​dialogMessage = GwUtils.javascriptAndHtmlEscape(dialogMessage);​ +          dialogMessage = GwUtils.javascriptAndHtmlEscape(dialogMessage);​ 
-     ​modelAndView.addObject("​dialogMessage",​ dialogMessage);​+          modelAndView.addObject("​dialogMessage",​ dialogMessage);​
      ​} ​      ​} ​
      ​return modelAndView;​      ​return modelAndView;​
-     +
-     ​@RequestMapping(value = "​{projectType}/​{projectName}/​gwPluginType",​ method = RequestMethod.POST,​ produces = "​text/​html;​ charset=utf-8"​) + 
-     ​@ResponseBody +@RequestMapping(value = "​{projectType}/​{projectName}/​gwPluginType",​ method = RequestMethod.POST,​ produces = "​text/​html;​ charset=utf-8"​) 
-     ​public ModelAndView gwPluginType(+@ResponseBody 
 +public ModelAndView gwPluginType(
      ​@PathVariable String projectType,​      ​@PathVariable String projectType,​
      ​@PathVariable String projectName,​      ​@PathVariable String projectName,​
      ​@RequestBody HashMap<​String,​ Object> hashMap,      ​@RequestBody HashMap<​String,​ Object> hashMap,
      ​Locale locale      ​Locale locale
-     ){+){
     ...     ...
-    ​}+} 
 +</​code>​
  
 Un eventuale plugin di Geoweb che faccia uso di uno specifico type di leafItem, dovrà quindi anche preoccuparsi di esporre un congruo metodo (mappato appropriatamente tramite @RequestMapping) dentro una sua classe controller. Un eventuale plugin di Geoweb che faccia uso di uno specifico type di leafItem, dovrà quindi anche preoccuparsi di esporre un congruo metodo (mappato appropriatamente tramite @RequestMapping) dentro una sua classe controller.
  
-*** LeafItem jsp Path ***+=== LeafItem jsp Path ===
 Per le versioni precedenti alla **4.6.0** è inoltre necessario impostare esplicitamente il //​leafItemJspPath//​ di default, nel gwRegistry o nei vari *InitializerService.java dei plugin, tramite l'​istruzione:​ Per le versioni precedenti alla **4.6.0** è inoltre necessario impostare esplicitamente il //​leafItemJspPath//​ di default, nel gwRegistry o nei vari *InitializerService.java dei plugin, tramite l'​istruzione:​
 <code java> <code java>
 gwRegistry.setLeafItemJspPath("​gwPluginType",​ "/​jsp/​commons/​accordionPaneBar/​accordionPane/​leafItem/​leafItemSimple.jsp"​);​ gwRegistry.setLeafItemJspPath("​gwPluginType",​ "/​jsp/​commons/​accordionPaneBar/​accordionPane/​leafItem/​leafItemSimple.jsp"​);​
-<​code>​+</code>
 Dalla versione **4.6.0** //​leafItemSimple.jsp//​ è assegnato di default. Dalla versione **4.6.0** //​leafItemSimple.jsp//​ è assegnato di default.
  
-*** LeafItem jsp Path Override ​***+=== LeafItem jsp Path Override ​===
 E' possibile bypassare questo meccanismo impostando una specifica .jsp che può essere usata per determinare il come verrà mostrato il LeafItem. E' possibile bypassare questo meccanismo impostando una specifica .jsp che può essere usata per determinare il come verrà mostrato il LeafItem.
  
Linea 106: Linea 110:
 <code java> <code java>
 gwRegistry.setLeafItemJspPath("​gwPluginType","/​jsp/​commons/​pathToSpecific/​file.jsp"​);​ gwRegistry.setLeafItemJspPath("​gwPluginType","/​jsp/​commons/​pathToSpecific/​file.jsp"​);​
-<​code>​ +</code>
-Naturalmente la jsp mappata deve essere resa disponibile nel plugin o in qualche altra parte del framework.+
  
 +Naturalmente la jsp mappata deve essere resa disponibile nel plugin o in qualche altra parte del framework.
  
-*** Handler Function ​***+=== Handler Function ​===
  
 Accade che, in taluni casi, non si voglia aprire un tab al click sul leafItem. Accade che, in taluni casi, non si voglia aprire un tab al click sul leafItem.
  • custom/development_creazione_nuovo_menu_terzo_livello_leafitem.1678441151.txt.gz
  • Ultima modifica: 2023/03/10 10:39
  • da giorgio.scali