Moved from SF
http://sourceforge.net/tracker/index.php?func=detail&aid=1051553&group_id=48726&atid=453974:
Using dynamic menu example, the order in which the
menus are drawn is not related to the ORDER BY clause
in the SELECT statement. I've verified this using MySQL
and a simple case:
<%@include file="include/jspheader.jsp"%>
<sql:query var="parents" dataSource="${db}">
SELECT * FROM test WHERE parentId IS NULL ORDER BY id
</sql:query>
<%
Result result = (Result)
pageContext.getAttribute("parents");
Map[] rows = result.getRows();
MenuRepository repository = new MenuRepository();
MenuRepository defaultRepository = (MenuRepository)
application.getAttribute(MenuRepository.MENU_REPOSITORY_KEY);
repository.setDisplayers(defaultRepository.getDisplayers());
for (int i=0; i < rows.length; i++) {
MenuComponent mc = new MenuComponent();
Map row = rows[i];
Integer requestId = (Integer) row.get("id");
Integer parentId = (Integer) row.get("parentId");
System.out.println("id: " + requestId.toString());
String rcValue = (String) row.get("name");
mc.setName(requestId.toString());
mc.setTitle(requestId.toString() + " - " +
(String) row.get("name"));
mc.setLocation("request-account-id.jsp");
repository.addMenu(mc);
}
pageContext.setAttribute("repository", repository);
%>
<html>
<%@include file="include/htmlheader.jsp"%>
<head><title>JSP Page</title></head>
<body>
<div>
Using TagLib <menu:userMenuDisplayer>
<menu:useMenuDisplayer name="ListMenu"
repository="repository">
<c:forEach var="menu"
items="${repository.topMenus}">
<menu:displayMenu name="${menu.name}"/>
</c:forEach>
</menu:useMenuDisplayer>
</div>
<div>
<pre>
mysql> select * from test where parentId is null order
by id;
+----+----------+--------------+
| id | parentId | name |
+----+----------+--------------+
| 1 | NULL | TAXCONDITION |
| 4 | NULL | TAXCONDITION |
| 8 | NULL | TAXCONDITION |
+----+----------+--------------+
3 rows in set (0.00 sec)
</pre>
</div>
</body>
</html>
Comments
Date: 2004-10-21 19:04
Sender: sd159Accepting Donations
Logged In: YES
user_id=47470
This very tiny patch solves the problem.
--- MenuRepository.java.orig 2004-10-22
09:00:08.169532939 +0800
+++ MenuRepository.java 2004-10-22 08:51:14.456181565 +0800
@@ -37,7 +37,7 @@
protected String config = null;
protected String name = null;
protected ServletContext servletContext = null;
- protected FastHashMap menus = new FastHashMap();
+ protected LinkedHashMap menus = new LinkedHashMap();
protected FastHashMap displayers = new FastHashMap();
protected FastHashMap templates = new FastHashMap();
@@ -213,7 +213,7 @@
input =
getServletContext().getResourceAsStream(config);
digester.parse(input);
- menus.setFast(true);
+ //menus.setFast(true);
} catch (Exception e) {
e.printStackTrace();
throw new LoadableResourceException("Error
parsing resource file: " +
@@ -226,7 +226,7 @@
}
public void reload() throws LoadableResourceException {
- menus.setFast(false);
+ //menus.setFast(false);
menus.clear();
displayers.setFast(false);
displayers.clear();