2011-11-22 28 views
10

Tôi có thẻ JSP tùy chỉnh đang sử dụng thông số là enum. Cách tiếp cận này là kết quả của việc sử dụng các lớp khác cần liệt kê này. Vấn đề là tôi không có đầu mối làm thế nào để gán một giá trị enum trong EL:Chuyển giá trị enum dưới dạng thuộc tính thẻ trong JSP

<mytaglib:mytag enumParam="${now what do I type here?}" /> 

Cách giải quyết duy nhất mà tôi tìm thấy cho đến nay là để làm cho enumParam một Integer và chuyển nó sang giá trị mong muốn:

<mytaglib:mytag enumParam="3" /> 

Tôi tin rằng phải có cách tốt hơn để làm điều đó. Hãy giúp tôi.

Trả lời

12

EL cho phép sử dụng Enums!

Có ba cách để thiết lập một giá trị thẻ thuộc tính bằng cách sử dụng một rvalue hoặc biểu hiện giá trị trái:
[..]

Chỉ với văn bản:

< số: thẻ value = "sometext "/ >

Biểu thức này được gọi là biểu thức theo nghĩa đen. Trong trường hợp này, giá trị Chuỗi của thuộc tính được ép buộc theo loại mong đợi của thuộc tính. Biểu thức giá trị chữ có các quy tắc cú pháp đặc biệt. Xem Biểu thức nghĩa đen để biết thêm thông tin. Khi thuộc tính thẻ có loại enum, biểu thức mà thuộc tính sử dụng phải là biểu thức theo nghĩa đen. Ví dụ: thuộc tính thẻ có thể sử dụng cụm từ "trái tim" có nghĩa là Suit.hearts. Chữ được ép buộc là Suit và thuộc tính có giá trị là Suit.hearts.

http://download.oracle.com/javaee/5/tutorial/doc/bnahq.html

Enum:

public Enum Color{ 
    RED, BLUE, GREEN 
} 

JSP/Tag tập tin

<mytaglib:mytag enumParam="${'RED'}" /> 

Thử nghiệm với Tomcat 7.0.22 cũng như Jetty 6.1.26.

+0

Cũng được thử nghiệm để làm việc trên Tomcat 6.0. – Bass

-1

EL không hỗ trợ truy cập Enums. Bạn nên xem xét việc sử dụng chuỗi.

Ví dụ:

public Enum Color{ 
    READ, BLUE, GREEN 
} 

Bạn có thể vượt qua chuỗi thẻ tùy chỉnh của bạn như dưới đây:

<mytaglib:mytag enumParam="RED" /> 
OR 
<mytaglib:mytag enumParam="${obj.color}" /> 

Trong thẻ tùy chỉnh của bạn, bạn nhận được giá trị enum như thế này:

Color.valueOf("RED"); 
+2

Trong nhận xét của devpg nó cho thấy rằng enums được hỗ trợ. Và tôi cũng có thể xác nhận rằng giải pháp của anh ấy hoạt động. –

+0

Đồng ý với Peter. Điều này LAF không đúng. Trong ví dụ của bạn, 'enumParam =" $ {'BLUE'} "' sẽ hoạt động tốt. – dgrundel

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