Đây là hai khả năng khác:
Các hằng số JSP EL 3.0
Miễn là bạn đang sử dụng ít nhất phiên bản 3.0 của EL, thì bạn có thể nhập các hằng số vào trang của mình như sau:
<%@ page import="org.example.Status" %>
<c:when test="${dp.status eq Status.VALID}">
Tuy nhiên, một số IDE chưa hiểu điều này (ví dụ: IntelliJ ), vì vậy bạn sẽ không nhận được bất kỳ cảnh báo nào nếu bạn mắc lỗi chính tả, cho đến thời gian chạy.
Đây sẽ là phương pháp ưa thích của tôi khi nó được hỗ trợ IDE thích hợp.
Phương pháp người trợ giúp
Bạn chỉ có thể thêm getters vào enum của mình.
public enum Status {
VALID("valid"), OLD("old");
private final String val;
Status(String val) {
this.val = val;
}
public String getStatus() {
return val;
}
public boolean isValid() {
return this == VALID;
}
public boolean isOld() {
return this == OLD;
}
}
Sau đó, trong JSP của bạn:
<c:when test="${dp.status.valid}">
Điều này được hỗ trợ trong tất cả các IDE và cũng sẽ hoạt động nếu bạn chưa thể sử dụng EL 3.0. Đây là những gì tôi làm vào lúc này vì nó giữ tất cả logic được gói gọn trong enum của tôi.
Cũng hãy cẩn thận nếu biến lưu trữ enum có thể là null. Bạn sẽ cần kiểm tra điều đó trước nếu mã của bạn không đảm bảo rằng nó không rỗng:
<c:when test="${not empty db.status and dp.status.valid}">
Tôi nghĩ rằng phương pháp này tốt hơn so với những phương pháp mà bạn đặt giá trị trung gian trong JSP vì bạn phải làm điều đó trên mỗi trang mà bạn cần sử dụng enum. Tuy nhiên, với giải pháp này bạn chỉ cần khai báo getter một lần.