Có vẻ như câu hỏi này đang thấy sự lộn xộn. Tôi đã đưa ra vấn đề rất nhiều, mặc dù không tìm thấy bất kỳ giải pháp khả thi nào, vì vậy tôi nghĩ rằng tôi sẽ viết một ý tưởng mà tôi có, tôi đăng bài này cho bình luận của bạn, cho tôi biết nếu bạn nghĩ nó là * * t ý tưởng, nếu bạn nghĩ rằng nó xứng đáng, tôi sẽ gửi mã kết quả.
Thứ nhất, tôi đang lập kế hoạch để giải quyết vấn đề này bằng một servlet yêu cầu đơn giản tải các tài nguyên tệp trình đơn XML (ban đầu chỉ là một, nhưng hỗ trợ cho sau này). Một trình đơn bao gồm sau đó có thể useBean
các menu được nạp và hiển thị theo bất kỳ cách nào người dùng mong muốn, mục tiêu mặc định là danh sách đơn giản không có thứ tự, điều này khá phổ biến. Vì vậy, đầu tiên, menu của tôi có thể trông giống như sau, nó được cung cấp cho vai trò bảo mật, nhưng đó có thể là một cái gì đó như là một "bổ sung thêm" bằng cách tạo hai phiên bản SimpleMenuServlet
và SpringSecurityMenuServlet
hoặc một cái gì đó tương tự.
<menus>
<menu id='home' path='/home'>
<paths>
<match pattern='/home'/>
</paths>
</menu>
<menu id='administration' path='/admin'>
<allowed-roles>
<role name='admin'/>
</allowed-roles>
<paths>
<match pattern='/admin/**'/>
</paths>
</menu>
<menu id='reports' path='/reports'>
<allowed-roles>
<role name='user'/>
<role name='admin'/>
</allowed-roles>
<paths>
<match pattern='/reports/**'/>
<match pattern='/item/*/reports/**'/>
</paths>
<menu>
</menus>
LƯU Ý: không có "Văn bản" hiển thị trên các menu vì mục đích này được dự định trả về từ gói tài nguyên.
Hiển thị bây giờ có thể được thực hiện với một số useBean
từ servlet hoặc qua thư viện thẻ tùy chỉnh mà tôi không nghĩ là thực sự cần thiết, nhưng ai biết được.
<ul id="main-menu">
<c:forEach var="item" items="${menu-items}">
<c:choose>
<c:when test="${item.selected && !found}">
<c:set var="menuClass" value="selected"/>
<c:set var="found" value="selected"/>
</c:when>
<c:otherwise>
<c:set var="menuClass" value=""/>
</c:otherwise>
</c:choose>
<li id="${item.id}" class="${menuClass}">
<!-- Using resource bundle to get text, this could be the
servlet/menu item that's responsible to get this instead -->
<a href="${item.path}"><fmt:message key="menu-${item.id}" /></a>
</li>
</c:forEach>
</ul>
Bây giờ lập luận của tôi là tôi có thể jar servlet và menu đậu lên, kiểm soát nó thông qua web.xml
đối với các tập tin trình đơn tải và khởi động vv, sau đó render bởi bất kỳ quan điểm.
Như bạn có thể thấy cốt lõi của menu hoạt động theo mẫu đường xác định khu vực bạn đang ở, nó không xử lý liên kết trang như khuôn mặt, nhưng đó không phải là những gì tôi đang có ý định, tôi đang tìm kiếm một trình đơn tĩnh, có thể cấu hình, có thể duy trì, mà cả chế độ xem của tôi lẫn bộ điều khiển của tôi đều không có kiến thức lớn.
Đó là một giải pháp tuyệt vời ejmarino, cảm ơn bạn. Tôi đã sử dụng gạch nên điều này khá đơn giản để làm. Nó có nghĩa là trong menu.jsp của tôi, tôi phải đặt nhiều ' ' các khối để xác định xem lớp đó có nên được áp dụng cho 'li' đó hay không, mặc dù điều này có thể được đơn giản hóa với một đoạn mã JavaScript nhỏ. Cảm ơn một lần nữa, câu trả lời tuyệt vời. –