JSP: Các thành phần JavaBeans

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Các thành phần của JavaBeans là các lớp Java có thể dễ dàng tái sử dụng và kết hợp thành các ứng dụng. Bất kỳ lớp Java nào theo các quy ước thiết kế thì nhất định là thành phần JavaBeans.

Công nghệ JavaServer Pages hỗ trợ trực tiếp các thành phần JavaBeans với các thành phần ngôn ngữ chuẩn JSP. Bạn có thể dễ dàng tạo và khởi tạo các bean cũng như nhận và thiết lập các giá trị của thuộc tính của chúng.

Các cách thức thiết kế các thành phần JavaBeans

Các cách thức thiết kế thành phần của JavaBeans điều khiển các thuộc tính của lớp và điều khiển các phương thức public cho phép truy cập vào các thuộc tính.

Thuộc tính của thành phần JavaBeans có thể là:

  • Read/write, read-only, or write-only

  • Đơn giản, có nghĩa là nó chứa một giá trị, hoặc được lập chỉ mục, có nghĩa là nó đại diện cho một mảng các giá trị

Một thuộc tính không phải được thực hiện bởi một biến thể hiện. Nó chỉ đơn giản là có thể truy cập bằng cách sử dụng các phương thức public phù hợp với các quy ước sau đây:

  • Đối với mỗi thuộc tính có thể đọc, bean phải có một phương thức có dạng:

    PropertyClass getProperty () {...}
  • Đối với mỗi thuộc tính có thể ghi được, bean phải có một phương thức có dạng:

    setProperty (PropertyClass pc) {...}

Ngoài định nghĩa các hàm cho thuộc tính ra, một thành phần JavaBeans phải định nghĩa một constructor (hàm tạo) không có tham số.

Các trang JSP của ứng dụng Duke’s Bookstore gồm bookstore.jspbookdetails.jspcatalog.jsp và showcart.jsp đặt tại tut-install/javaeetutorial5/examples/web/bookstore2/web đều sử dụng thành phần JavaBeans tut-install/javaeetutorial5/examples/web/bookstore2/src/java/com/sun/bookstore2/database/BookDB.java.

BookDB cung cấp giao diện người dùng JavaBeans cho đối tượng truy cập BookDBAO. Các trang JSP showcart.jsp và cashier.jsp truy cập vào bean tut-install/javaeetutorial5/examples/web/bookstore/src/com/sun/bookstore/cart/ShoppingCart.java, đại diện cho giỏ hàng của người dùng.

Bean BookDB có hai thuộc tính có thể ghi là bookId và database, và ba thuộc tính có thể đọc là: bookDetailsNUMBEROFBOOKS, và books. Các thuộc tính sau này không tương ứng với bất kỳ biến thể hiện nào mà là một hàm các thuộc tính bookId và database.

package database;
public class BookDB {
    private String bookId = "0";
    private BookDBAO database = null;
    public BookDB () {
    }
    public void setBookId(String bookId) {
    this.bookId = bookId;
    }
    public void setDatabase(BookDBAO database) {
    this.database = database;
    }
    public Book getBook() throws
         BookNotFoundException {
        return (Book)database.getBook(bookId);
     }
    public List getBooks() throws BooksNotFoundException {
        return database.getBooks();
    }
    public void buyBooks(ShoppingCart cart)
         throws OrderException {
        database.buyBooks(cart);
    }
    public int getNumberOfBooks() throws BooksNotFoundException {
        return database.getNumberOfBooks();
    }
}

Tạo và sử dụng thành phầm JavaBeans

Để khai báo rằng trang JSP sẽ sử dụng một thành phần JavaBeans thì bạn sử dụng một thành phần jsp:useBean. Có 2 dạng như sau:

<jsp:useBean id="beanName"
    class="fully-qualified-classname" scope="scope"/>

<jsp:useBean id="beanName"
    class="fully-qualified-classname" scope="scope">
    <jsp:setProperty .../>
</jsp:useBean>

Dạng thứ 2 được sử dụng khi bạn muốn đưa vào các lệnh jsp:setProperty (sẽ được mô tả trong phần tiếp theo) để khởi tạo các thuộc tính bean.

Phần tử jsp:useBean sẽ khai báo rằng trang sẽ sử dụng một bean được lưu trữ trong và có thể truy cập từ một phạm vi cụ thể như applicationsessionrequest, hoặc page. Nếu không có bean nào thì câu lệnh sẽ tạo bean và lưu nó như một thuộc tính của đối tượng phạm vi. Giá trị của thuộc tính id sẽ xác định tên của bean trong phạm vi và bộ nhận diện được sử dụng để tham chiếu bean trong các biểu thức EL, các thành phần JSP khác và các biểu thức kịch bản. Giá trị đã được cung cấp cho thuộc tính class phải là một tên lớp có đầy đủ các điều kiện. Lưu ý rằng các bean không thể nằm trong package không có tên vì định dạng của giá trị phải là package-name.class-name.

Phần tử sau sẽ tạo một thể hiện của mypkg.myLocales nếu không có sẵn, lưu trữ nó như một thuộc tính của phạm vi ứng dụng, và tạo bean cho phép thông qua ứng dụng bởi bộ nhận diện locales:

<jsp:useBean id="locales" scope="application"
    class="mypkg.MyLocales"/>

Thiết lập các thuộc tính thành phần JavaBeans

Các thức chuẩn để thiết lập các thuộc tính thành phần JavaBeans trong trang JSP là bằng cách sử dụng phần tử jsp:setProperty. Cú pháp của phần tử jsp:setProperty sẽ phụ thuộc vào nguồn của giá trị thuộc tính. Bảng sau sẽ thống kê các cách khác nhau để thiết lập thuộc tính thành phần JavaBeans component sử dụng phần tử jsp:setProperty.


Lưu ý -

Các quy tắc cú pháp của các giá trị thuộc tính sử dụng trong bảng này:

  1. beanName phải tương tự như mô tả cho thuộc tính id trong phần tử useBean.

  2. Phải có 1 phương thức setPropName trong thành phần JavaBeans.

  3. paramName phải là một tên của bộ tham số yêu cầu.


Giá trị nguồn

Cú pháp phần tử

Hằng String

<jsp:setProperty name="beanName"
   property="propName" value="string-constant"/>

Tham số yếu cầu

<jsp:setProperty name="beanName"
   property="propName" param="paramName"/>

Tên tham số yêu cầu tương thích với thuộc tính bean

<jsp:setProperty name="beanName"
   property="propName"/>
<jsp:setProperty name="beanName"
   property="*"/>

Biểu thức

<jsp:setProperty name="beanName"
   property="propName" value="expression"/>
<jsp:setProperty name="beanName"
   property="propName" >
   <jsp:attribute name="value">
      expression
   </jsp:attribute>
</jsp:setProperty>

Thuộc tính bean hợp lệ gán từ các giá trị kiểu String

Một tập thuộc tính từ một chuỗi hằng hoặc một tham số yêu cầu thì phải có dạng là một trong các kiểu như chỉ ra ở bảng trên. Do các hằng và tham số yêu cầu có dạng chuỗi nên bộ chứa web sẽ tự động chuyển đổi giá trị thành kiểu của thuộc tính với cách thức chuyển đổi được chỉ ra ở bảng trên.

Các giá trị kiểu String có thể được sử dụng để gán các giá trị cho một thuộc tính mà có lớp PropertyEditor. Khi đó thì phương thức setAsText(String) sẽ được sử dụng. Việc chuyển đổi sẽ lỗi nếu phương thức ném ngoại lệ IllegalArgumentException.

Giá trị được gán cho một thuộc tính chỉ mục phải la một mảng, và các quy tắc đã được mô tả sẽ áp dụng cho các phần tử.

Bạn sử dụng biểu thức để thiết lập giá trị của thuộc tính trong đó kiểu được hợp nhất với kiểu trong Java. Kiểu trả về từ một biểu thức phải phù hợp hoặc có thể ép kiểu với kiểu của thuộc tính.

Kiểu thuộc tính

Chuyển đổi giá trị String

Thuộc tính bean

Dùng setAsText(string-literal)

boolean hoặc Boolean

Được chỉ ra ở java.lang.Boolean.valueOf(String)

byte hoặc Byte

Được chỉ ra trong java.lang.Byte.valueOf(String)

char hoặc Character

Được chỉ ra trong java.lang.String.charAt(0)

double hoặc Double

Được chỉ ra trong java.lang.Double.valueOf(String)

int hoặc Integer

Được chỉ ra trong java.lang.Integer.valueOf(String)

float hoặc Float

Được chỉ ra trong java.lang.Float.valueOf(String)

long hoặc Long

Được chỉ ra trong java.lang.Long.valueOf(String)

short hoặc Short

Được chỉ ra trong java.lang.Short.valueOf(String)

Object

new String(string-literal)

Giá trị thuộc tính hợp lệ được gán từ các giá trị kiểu String

Ứng dụng Duke’s Bookstore sẽ chỉ ra cách sử dụng phần tử setProperty để thiết lập sách hiện thời từ một tham số yêu cầu trong cơ sở dữ liệu bean trong tut-install/javaeetutorial5/examples/web/bookstore2/web/books/bookdetails.jsp:

<c:set var="bid" value="${param.bookId}"/>
<jsp:setProperty name="bookDB" property="bookId"
    value="${bid}" />

Đoạn code sau lấy từ trang tut-install/javaeetutorial5/examples/web/bookstore2/web/books/bookshowcart.jsp sẽ minh họa cách khởi tạo một bean BookDB với một đối tượng databaseo. Do việc khởi tạo lồng trong một phần tử useBean nên nó được thực thi chỉ khi bean được tạo.

<jsp:useBean id="bookDB" class="database.BookDB" scope="page">
    <jsp:setProperty name="bookDB" property="database"
         value="${bookDBAO}" />
</jsp:useBean>

Truy xuất các thuộc tính thành phần JavaBeans

Cách thức chủ yếu để truy xuất các thuộc tính của thành phần JavaBeans là sử dụng các biểu thức EL hợp nhất. Do vậy, để truy xuất tiêu đề của sách thì ứng dụng Duke’s Bookstore sử sử dụng biểu thức sau:

${bookDB.bookDetails.title}

Có một cách khác để truy xuất các thuộc tính thành phần JavaBeans là sử dụng phần tử jsp:getProperty. Phần tử này sẽ chuyển giá trị của thuộc tính thành dạng String và chèn giá trị vào luồng phản hồi.

<jsp:getProperty name="beanName" property="propName"/>

Lưu ý rằng beanName phải tương tự như mô tả cho thuộc tính id trong một phần tử useBean, và phải là một phương thức getPropName trong thành phần JavaBeans. Mặc dù giải pháp tối ưu để lấy các thuộc tính là sử dụng một biểu thức EL, nhưng phần tử getProperty sẽ được dùng đến nếu bạn cần bỏ qua việc lượng giá biểu thức.

« Trước: Ngôn ngữ biểu thức hợp nhất
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!