2009-02-13 32 views
11

Tôi đang sử dụng Spring cho biểu mẫu HTML. Một trong các trường là enum và do đó tôi muốn danh sách thả xuống HTML (<option> thẻ). Tên enum của tôi khác với giá trị toString(). Ví dụ:Sử dụng thẻ tùy chọn Spring để hiển thị giá trị toString của enum

public enum Size { 
    SMALL("Small"), LARGE("Large"), VERY_LARGE("Very large"); 

    private final String displayName; 

    private Size(String displayName) { 
     this.displayName = displayName; 
    } 

    public String toString() { 
     return displayName; 
    } 
} 

Tôi muốn người dùng xem giá trị toString(). Thông thường, điều này được thực hiện bằng cách sử dụng itemLabel của thẻ tùy chọn Spring.

<form:options items="${enumValues}" itemLabel="beanProperty" /> 

Nhưng toString() không phải là thuộc tính bean vì nó không bắt đầu bằng "get". Có cách nào để thiết lập itemLabel để sử dụng giá trị toString mà không cần phải tạo một getter?

Trả lời

6

Tôi biết điều này là vài tuổi và phải được giải quyết ngay bây giờ, nhưng tôi nghĩ rằng tôi sẽ thêm giải pháp cho những người tương lai.

Chỉ cần xóa phần [itemLabel = "beanProperty"]. Nó sẽ sử dụng toString để in các giá trị.

+4

Không bao giờ quá muộn: http://xkcd.com/979/ –

+0

Điều này được sử dụng để làm việc trong 3.0, nhưng đã bị hỏng kể từ 3.1, xem https://jira.spring.io/browse/SPR-9214 và https://jira.spring.io/browse/SPR-10281 –

2

Tại sao không thêm phương thức getDisplayName() công khai vào enum của bạn?

+0

Tôi đang cố gắng tránh thêm phương thức bổ sung này vào từng enum. Nó không giúp cho enum không thể được mở rộng. –

1

Bạn đã thử sử dụng mô hình AOP mạnh mẽ của Spring để mở rộng enums của bạn từ một nơi? Có vẻ như, tùy thuộc vào số lượng enums bạn có, bạn có thể dễ dàng thêm một phương thức getDisplayName() cho tất cả chúng chỉ trả về giá trị toString() của chúng.

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