Điều này là do biến số pgTitle
được đặt trong phạm vi trang. Kiểm tra xem nó here (xin lỗi tôi không thể có được một tài liệu chính thức cho việc này).
Nếu bạn muốn thực hiện công việc này, bạn phải đặt biến trong phạm vi yêu cầu ít nhất. Để thiết lập biến của bạn trong phạm vi yêu cầu, sử dụng thuộc tính scope
trên <c:set>
:
<c:set var="pgTitle" value="Welcome" scope="request" />
mỗi nhận xét của bạn, trong phát triển web, phạm vi của các biến quan trọng vì nó xác định nơi mà các biến thể được sử dụng (tương tự vào một biến được khai báo là trường trong một lớp và một biến được khai báo cục bộ trong một phương thức). Có bốn phạm vi trong JSP được gọi là ngữ cảnh:
- Phạm vi trang (được xử lý bởi PageContext). Các biến chỉ có thể đạt được nếu được đặt làm thuộc tính trong trang hiện tại. Điều này có nghĩa, chỉ trang hiện tại mới có thể truy cập các thuộc tính này, các trang được bao gồm là các trang khác nhau, vì vậy chúng không thể truy cập các thuộc tính này.
- Phạm vi yêu cầu (được xử lý bởi ServletRequest). Các biến chỉ có thể đạt được nếu được đặt làm thuộc tính trong yêu cầu hiện tại. Điều này có nghĩa là mọi trang được xử lý trong cùng một yêu cầu đều có thể truy cập vào các thuộc tính này. Lưu ý quan trọng: Chuyển hướng ngụ ý một quy trình yêu cầu/phản hồi mới. Điều này có nghĩa, nếu bạn đặt thuộc tính trên yêu cầu và thực thi chuyển hướng, các thuộc tính này sẽ không được đặt làm thuộc tính trên yêu cầu mới.
- Phạm vi phiên (được xử lý bởi HttpSession). Các biến chỉ có thể đạt được nếu được đặt làm thuộc tính trong phiên người dùng hiện tại. Điều này có nghĩa là mọi trang được sử dụng trong cùng một phiên người dùng đều có thể sử dụng các thuộc tính này cho đến khi chúng được xóa hoặc phiên hết hạn.
- Phạm vi ứng dụng (được xử lý bởi ServletContext). Các biến chỉ có thể đạt được nếu được đặt làm thuộc tính trong ngữ cảnh hiện tại. Điều này có nghĩa, mỗi trang trên mỗi thuộc tính phiên có thể truy cập vào các biến này cho đến khi chúng được xóa khỏi SessionContext hoặc ứng dụng web không được triển khai. Thông tin
thêm:
Đây có phải là cách đúng đắn để thực hiện những gì tôi đang cố gắng để làm gì?
Nếu có Servlet hoặc bộ điều khiển khác xử lý các thuộc tính được đặt trong yêu cầu (ví dụ: @Controller
từ bean quản lý Spring MVC hoặc JSF), sau đó đặt thuộc tính ở đó và không trực tiếp trong trang của bạn.
Cá nhân, phải mất một thời gian để kiếm được kinh nghiệm và xác định phạm vi tốt nhất của các biến khi được sử dụng trên các ứng dụng web. Ví dụ cơ bản:
- Chia tách một
String
bằng dấu phẩy cho mục đích trình bày sẽ chỉ ảnh hưởng đến chế độ xem hiện tại, do đó, điều này có thể được đặt trong phạm vi trang.
- Lỗi và thư thành công phù hợp nhất trong phạm vi yêu cầu. Nếu người dùng cập nhật trang, họ có thể không được xem cùng một tin nhắn trừ khi dữ liệu được xử lý lại.
- Thông tin người dùng dưới dạng tên, biệt hiệu và tùy chọn có thể được đặt trong phạm vi phiên.
- Nếu bạn phải hiển thị danh sách các Quốc gia (không nên thay đổi trong vài ngày), bạn có thể lưu trữ danh sách này trong phạm vi ứng dụng.
Nguồn
2013-05-17 23:10:16
này đã làm trong công việc thực tế. Tôi có thể yêu cầu giải thích kỹ thuật hơn về những gì đang xảy ra ở đây không? Tại sao jsp: include không có quyền truy cập vào một tập hợp biến trong cha mẹ? Câu hỏi cuối cùng: Đây có phải là cách đúng để hoàn thành những gì tôi đang cố gắng làm không? Đã cập nhật – vcardillo
@vcardillo câu trả lời. –
Siêu hữu ích. Cảm ơn bạn đã dành thời gian để cung cấp những chi tiết này! – vcardillo