2013-04-17 35 views
5

Tôi đang di chuyển một ứng dụng struts sang Struts 2. Nó được phát triển bởi Struts 1.2 bốn năm trước đây.jsp: thẻ chuyển tiếp chuyển tiếp đến hành động Struts 2

Câu hỏi của tôi là:

Trong JSP của tôi, có một tuyên bố như vậy:

<jsp:forward page="/a.do" /> 

Nó hoạt động tốt trong Struts 1, nhưng không hoạt động trong Struts 2, nó cho tôi biết Lỗi HTTP 404 khi tôi đang truy cập tệp JSP này.

Tuy nhiên, nếu tôi truy cập vào http://localhost:8080/shell/a.do, nó hoạt động tốt.

Tôi tự hỏi lý do, có phải vì hành động chuyển tiếp không thể bị bộ lọc Struts 2 bắt gặp không? (org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter)

Vì vậy, chuyển tiếp không thể được gửi đến hành động Struts 2?

Có nhiều tiền tố trong ứng dụng của tôi, nếu tiền đạo không thể hoạt động trong Struts 2, nó có phải là giải pháp duy nhất để sử dụng chuyển hướng thay vì chuyển tiếp không?

Thực ra câu hỏi này dựa trên phân tích của tôi, công việc ban đầu là hiển thị trang chào mừng của trang web. Nếu tôi sử dụng jsp:forward chuyển tiếp đến a.do, nó không hoạt động. Và tôi đã làm theo lời khuyên của Roman, sử dụng result thay vì chuyển tiếp. Vì vậy, câu hỏi bây giờ là làm thế nào để cấu hình hành động mặc định cho toàn bộ ứng dụng?

Tôi đã thử <default-action-ref name="a"/>, nhưng nó chỉ hoạt động cho các tác vụ chưa được ánh xạ, ví dụ: http://localhost:8080/shell2/(some-unmapped-action).do, hành động mặc định. Nhưng nó không hoạt động nếu tôi không chỉ định ".do".

Tất nhiên điều này có thể được thực hiện bằng cách ghi đè url, nhưng tôi không muốn sử dụng phương pháp này.

+0

Xin chào tất cả, tôi nghĩ câu hỏi này có thể được đóng lại, vì chỉ khi Tôi đã thêm ' REQUEST INCLUDE FORWARD' trong web.xml của tôi cho bộ lọc struts2, sự cố này có thể được khắc phục. FYI. –

Trả lời

1

Đó là 404 vì không có hành động nào được ánh xạ với /a.do trong struts2 hoặc struts1 nếu bạn sử dụng đồng thời. Các thẻ jsp sẽ hoạt động tốt nhưng tốt hơn để di chuyển đến struts tags bất cứ khi nào có thể. Khái niệm về chuyển tiếp từ struts1 được chuyển sang khái niệm dispatcher result. Bạn phải xóa tất cả chuyển tiếp từ ứng dụng của mình và tạo kết quả thay thế.

+0

Cảm ơn bạn rất nhiều vì đã trả lời, Roman. –

+0

"Bạn phải xóa tất cả chuyển tiếp từ ứng dụng của mình và tạo kết quả thay thế". Đây là một con trỏ tuyệt vời! Tuy nhiên, vấn đề thực sự của tôi là khi tôi nhập vào http: // localhost: 8080/shell2, tôi muốn truy cập trang chủ, vì vậy trong tệp welcom.jsp của tôi (được định cấu hình trong tệp web.xml, tệp-welcome-list), yêu cầu có thể được chuyển tiếp đến một hành động struts 1. Nhưng nó không thể được thực hiện trong struts 2. Những gì tôi muốn làm chỉ là một chuyển tiếp đến home.do (một hành động struts 2). Có thể không? Phương pháp tiếp cận tôi đã thử như sau: 1. , không thành công, điều này chỉ khớp với URL không tồn tại; –

+0

2. điều này hoạt động, nhưng tất cả các url không tồn tại sẽ đi đến trang chủ, đây không phải là những gì tôi muốn xem.Tôi muốn nhận được chỉ là một hành động HOME mặc định. Có thể trong struts 2 Cảm ơn rất nhiều lần nữa –

4

Bao gồm thư viện struts thẻ

<%@ taglib prefix="s" uri="/struts-tags" %> 

và u chỉ đơn giản là có thể viết trong trang jsp ur để forword đến một số hành động

<s:action name="YourAction" namespace="/PackageNamespace" executeResult="true" /> 
+0

Tại sao chúng ta không thể sử dụng html thuần thay vì struts2. là có bất kỳ avantage khác hơn đề cập đến là trực tiếp YourAction Sridhar

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