Appfuse為了開發人員可以快速的處理Menu的部份,所以引進了Struts menu的功能,開發人員只要照Struts menu的規格走即可。

Struts menu的設定

關於Struts menu的相關資訊與設定,可以參考它的官網;因為Appfuse已經幫我們都設定好了,所以我們就快速地帶到應用面吧。

menu-config.xml的設定

Struts menu最主要的設定檔為menu-config.xml,Appfuse將它放在WEB-INF裡,

我們打開menu-config.xml來內容:

首先,這個XML分為二段,第一段是宣告Velocity,Velocity是一種另類的程式語言,它要求開發者將程式與最後輸出的結果寫在同一個檔中,並在該文字檔中進行if或者for等相關的程式用法,而最後Velocity將程式運作完成的內容當成文字回傳,稍後我們可以看到更詳細的用法。

第二段是Menu的宣告,這一段就是我們主要的戲肉了;因為我們在這裡可以宣告我想Menu主要的Item,在這裡,我們宣告了多國語系的對應、Item對應的聯結及Menu顯示的權限等。

其中權限的定義與Spring-security一樣,吃的是資料表role的name欄位,如下圖。

而這裡與Spring-security不同的地方是,這裡的權限控管的只是Menu的顯示與否,它並無法控管使用者能否進入該menu的內容;例如:一般使用者無法看到管理員權限的Menu,但如果一般使用者知道相關的網址,例如查所有帳號功能,那麼這個使用者還是可以透過網址列直接進入到管理權限人的頁面。這種狀況的防堵應該是Spring-security該做的,而不是Struts-menu該做的。

Struts-menu的呈現

當我們設定menu-config.xml後,我們就開始來看實際上的使用方法。在Appfuse中,使用Struts-menu的方法是透過menu.jsp來呈現的,讓我們來看一下menu.jsp:

這邊有比較複雜,讓我們來仔細看看這些內容,首先是JSTL的menu tag:

這裡有三個屬性,其中name與menu-config.xml中的所設定的Display是一樣的,而permissions的部份是維持rolesAdapter的值,因為它會自動幫我們套用role資料表的值,其中最重要的是config這個屬性的值,它的值會對應一個檔,所以我們可以把navbarMenu.vm這個檔打開:

這個檔案的存放路徑是:src/main/resoource底下,這底下的檔案都會在部署時被丟到WEB-INF/classes底下。

這一個檔案的內容就是上方提到的Velocity,因為Velocity又是另外一套程式語言,所以這段也不詳細介紹,有興趣的可以上Velocity的官網學習。這邊大家只要瞭解,Velocity跑完輸出的文字檔,會被轉回到menu.jsp中就可以了。

所以menu.jsp中的第9~12行中,menu:displayMenu之類的東西,每一行都會執行一次Velocity中的navbarMenu.vm檔案,最後產出的文字,就回到menu.jsp中相應的行數,下方是程式執行完的html:

各位讀者如果有興趣的話,可以根據產生出來的HTML,回去比對menu-config.xml與navbarMenu.vm的內容。

結論

Appfuse因為已經幫我們套用了Struts-menu的功能,所以我們在實作上有比較輕鬆;不過因為Struts-menu套用Velocity,所以門檻有比較高,但是因為Velocity的應用很廣,所以Struts-menu也算一個入門Velocity的機會,只要能掌握Velocity的話,Struts-menu並沒有什麼困難。

arrow
arrow

    JAVA Programmer 發表在 痞客邦 留言(0) 人氣()