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 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 40: Linea 40:
 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.
Linea 97: Linea 101:
 <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.
  
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 ===
  • custom/development_creazione_nuovo_menu_terzo_livello_leafitem.1678441189.txt.gz
  • Ultima modifica: 2023/03/10 10:39
  • da giorgio.scali