2010-07-29 33 views
6

Tôi đang bắt đầu một ứng dụng Spring MVC 3.0 và nhận được bộ điều khiển và chế độ xem hoạt động độc đáo, điều tôi cần làm là chuyển hướng hoạt động. Vì vậy, đối với mỗi chế độ xem tôi có, cần phải biết mục nào trong phần "menu" của chế độ xem để làm nổi bật và tùy chọn menu nào có sẵn cho chế độ xem đó.Vui lòng đề xuất chiến lược điều hướng nào để sử dụng cho Spring MVC 3.0

Một điều tôi nghĩ là để bộ điều khiển cho biết chế độ xem nó ở đâu, nhưng đó là logic xem ràng buộc vào bộ điều khiển. Trình đơn chế độ xem của tôi nằm trong danh sách riêng của tôi bao gồm trong mỗi chế độ xem.

Phương pháp tiếp cận của bạn là gì? Tôi đang nghĩ đến việc sử dụng gạch, đến thời điểm này tôi chỉ sử dụng JSP và JSTL, có lẽ điều này sẽ giúp ích?

Trả lời

3

tôi khuyên bạn nên sử dụng gạch như một người quản lý xem, và một viewNameTranslator như thế này:

<bean id="viewNameTranslator" class="org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator"> 
    <property name="separator" value="." /> 
</bean> 

Vì vậy, bằng cách này bạn có thể tránh được tên xem việc xac định trên lớp điều khiển trở lại khoảng trống.

sau ngói-def.xml bạn định nghĩa một somethin nhìn như thế này:

<definition name="newView" extends="baseView"> 
    <put name="menu" value="/pages/menu/menu.jsp?highlightedView=newView" /> 
    <put name="body" value="/pages/newStuff/content.jsp" /> 
</definition> 

Bằng cách này menu.jsp nhận được một aditional tham số highlightedView với thông tin bạn cần.-

Hy vọng điều đó sẽ hữu ích.

+0

Đó 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. –

1

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 SimpleMenuServletSpringSecurityMenuServlet 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.

+0

Vậy bộ điều khiển trông như thế nào? Thực đơn của chúng tôi thực sự cần liên kết đến một trang con khách hàng hiện tại và có clientId trong url. Nó chỉ có sẵn khi bên trong mô đun máy khách và một máy khách cụ thể đã được nạp. – dukethrash

Các vấn đề liên quan