2011-08-19 34 views

Trả lời

2

Cung cấp cho JSP một tham chiếu đến một thể hiện của lớp có phương thức và gọi nó.

Có lẽ bạn đang hỏi ai cung cấp cho JSP ví dụ - đó là một servlet trong sắp xếp MVC kiểu-2.

Đây là cách dòng chảy sẽ làm việc:

  1. Gửi một yêu cầu GET/POST từ một JSP để một servlet.
  2. Servlet hành động theo yêu cầu đó và thực hiện một số hoạt động thay mặt cho JSP. Đặt tất cả các đối tượng cần thiết vào yêu cầu, phiên hoặc phạm vi thích hợp khác.
  3. Các tuyến đường Servlet đáp ứng với JSP tiếp theo, có thể giống với JSP yêu cầu.
  4. Rửa sạch, lặp lại.
0

Nếu bạn đang sử dụng JSF, bạn có thể sử dụng hành động bean làm mô hình trong Phạm vi xem và tải từ nguồn dữ liệu tự động. Và nếu bạn đang sử dụng JSP, làm thế nào về việc sử dụng thẻ TLD? Và sử dụng thẻ JSTL <c:foreach>? Nó tiết kiệm bộ nhớ từ việc lưu trong phiên, hoặc lưu trong phiên và loại bỏ nó khi tải sự kiện xong? Một số cách như thế này (JSTL + TLD)

<c:forEach items="${myTag:getProductByPage(page)}" var="p"> 
    Product name: ${p.productName} 
</c:forEach> 
+0

Tôi đang sử dụng struts tiles.could bạn vui lòng giải thích nó yor giải thích, hơn chúng ta cần gọi một metod chấp nhận một tham số, ở đây nó sẽ là các giá trị ollean được đặt trong JSP. –

55

Bạn chỉ có thể gọi các phương pháp với đối số trong EL nếu bạn đang nhắm mục tiêu và chạy một Servlet 3.0 chứa tương thích (ví dụ Tomcat 7, Glassfish 3, JBoss AS 6, vv) với số web.xml được công bố phù hợp với Servlet 3.0. Phiên bản servlet này đi kèm với EL 2.2 cho phép gọi các phương thức cá thể tùy ý bằng các đối số.

Giả sử rằng bạn đã một ${bean} trong phạm vi đó đề cập đến một thể hiện của một lớp trong đó có một phương pháp giống như public Object[] getArray(String key), sau đó bạn sẽ có thể làm điều này:

<c:forEach items="${bean.getArray('foo')}" var="item"> 
    ${item} <br /> 
</c:forEach> 

hoặc thậm chí với một biến làm đối số

<c:forEach items="${bean.getArray(foo)}" var="item"> 
    ${item} <br /> 
</c:forEach> 

Nhưng nếu bạn không nhắm mục tiêu vùng chứa Servlet 3.0, thì bạn không thể gọi phương thức với đối số trong EL. Đặt cược tốt nhất của bạn là chỉ thực hiện công việc trong servlet tiền xử lý như đề xuất của Duffymo.

Object[] array = bean.getArray("foo"); 
request.setAttribute("array", array); 
// ... 

Là một phương án hoàn toàn khác, bạn có thể tạo hàm EL đại biểu cho cuộc gọi phương thức. Bạn có thể tìm thấy một ví dụ khởi động ở đâu đó gần cuối của this blog. Bạn muốn kết thúc một cái gì đó như là:

<c:forEach items="${util:getArray(bean, 'foo')}" var="item"> 
    ${item} <br /> 
</c:forEach> 

với

public static Object[] getArray(Bean bean, String key) { 
    return bean.getArray(key); 
} 
+1

Tôi đang làm một cái gì đó tương tự với đối tượng yêu cầu, gọi 'isUserInRole ('role')' nhưng eclipse nghĩ rằng đây là một phương thức get và phàn nàn về phương thức 'getIsUserInRole()' không tồn tại. Bạn có biết làm thế nào điều này có thể được cố định? Tôi đang sử dụng glassfish v3. Cảm ơn, D. – Daniel

+2

@Daniel: Eclipse yếu như kiểm tra và xác thực cú pháp EL. Chỉ cần vô hiệu hóa xác thực EL trong Eclipse, hoặc cài đặt JBoss Tools. – BalusC

+0

Cảm ơn. Tôi vô hiệu hóa nó và nó hoạt động. – Daniel

4

Công tác giải pháp didnt trên đối với tôi. Tôi có chức năng getRemitanceProfileInformation(user) trong lớp java của mình. Tôi đã tạo một lớp usebean của java và sau đó được gọi

<c:set var="paymentValueCode" value='remittanceaddr.getRemitanceProfileInformation("${user}")'/> 

và nó hoạt động.

+3

Tham chiếu sai, ai biết được giải pháp * ở trên * nào khi bạn trả lời. – madth3

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