Monday, May 30, 2005

AppFuse กับ Struts-menu

วันนี้นั่งดู code ที่ generate โดย AppFuse
มีการใช้ struts-menu ในการ render menu
(เดิม struts-menu มี dependency กับ struts
แต่ version 2.3 มีการ remove dependency
ออกไปแล้ว)

วิธีการใช้งาน
add listener ใน web.xml เพื่อใช้ load configuration ของ menu
<listener>
<listener-class>net.sf.navigator.menu.MenuContextListener</listener-class>
</listener>


สร้าง file menu-config.xml ใต้ WEB-INF
ภายในมีเนื้อหาอยู่ 2 ส่วน คือส่วน displayers ซึ่งใช้
config ว่าจะ render menu ด้วยวิธีไหน
กับส่วนเนื้อหาของ menu (ในส่วนเนื้อหานี้จะ
เป็นการ list menu ทั้งหมด โดยไม่เกี่ยวข้องกับลำดับ
ในการแสดงผล)
<MenuConfig>
<Displayers>
<Displayer name="DropDown"
type="com.fgm.web.menu.displayer.DropDownMenuDisplayer"/>
<Displayer name="Simple"
type="com.fgm.web.menu.displayer.SimpleMenuDisplayer"/>
</Displayers>

<Menus>

<Menu name="FileUpload" title="menu.selectFile"
description="File Upload" page="/selectFile.html"/>

<Menu name="indexMenu" title="Examples">
<Item name="indexMenu1" title="Basic Example"
toolTip="Shows usage of the menu displayers using defaults."
page="/menutest1.jsp"/>
<Item name="indexMenu2" title="Advanced Example"
toolTip="Shows customized menu displays."
page="/menutest2.jsp"/>
</Menu>

<Menu name="ToDoListMenuFile" title="FILE" description="test" width="50">
<Item name="TDLnew" title="NEW">
<Item name="TDLnewcase" title="CASE" image="images/case-new.png"
location="NewCase.jsp"/>
</Item>
</Menu>

</Menus>


ในส่วนการแสดงผลใน jsp เราจะใช้ taglib มาช่วย
<%@ taglib uri="http://struts-menu.sf.net/tag" prefix="menu" %>

เมื่อต้องการ render ก็เพียงแต่จับคู่เลือก displayer
กับ Menu Item ที่ต้องการแสดง
<menu:useMenuDisplayer name="ListMenu" permissions="rolesAdapter">
<menu:displayMenu name="Home"/>
<menu:displayMenu name="About"/>
</menu:useMenuDisplayer>


จะเห็นว่า menu ที่แสดงให้ดูโดยวิธีนี้ ยังมีลักษณะ
เป็น static อยู่ กรณีที่ต้องการ dynamic menu
(content menu เก็บอยู่ใน database)
ให้ดูที่นี่ ​Dynamic Menu

Related link from Roti

No comments: