2015-04-08 15 views
19

Enum özelliği olan bir etki alanı var ve bu nesne için formdaki tüm olası enum değerlerini içeren bir açılır liste görüntülemek istiyorum. aşağıdaki nesneyi düşünün:İlkbahar ve Thymeleaf kullanarak bir açılır listede tüm olası enum değerlerinin nasıl görüntülenir?

benim denetleyicisi olarak
public class Ticket { 

    private Long id; 

    private String title; 

    private State state; 

    // Getters & setters 

    public static enum State { 
    OPEN, IN_WORK, FINISHED 
    } 

} 

bu nesne için bir form kılan bir yöntemi vardır:

@RequestMapping("/tickets/new") 
public String showNewTicketForm(@ModelAttribute Ticket ticket) { 
    return "tickets/new"; 
} 

şablon şuna benzer:

<form th:action="@{/tickets}" method="post" th:object="${ticket}"> 
    <input type="text" th:field="*{title}" /> 
    <select></select> 
</form> 
Daha sonra

olması gerektiği

<form action="/tickets" method="post"> 
    <input type="text" name="title" /> 
    <select name="state"> 
    <option>OPEN</option> 
    <option>IN_WORK</option> 
    <option>FINISHED</option> 
    </select> 
</form> 
: böyle bir şeye dönüştürülebilir

Seçme etiketini nasıl oluşturabilirim?

@RequestMapping(value = "/tickets", method = RequestMethod.POST) 
public String createTicket(@Valid Ticket ticket) { 
    service.createTicket(ticket); 

    return "redirect:/tickets"; 
} 

cevap

43

Sen yapabilirdi: Ayrıca

<select> 
    <option th:each="state : ${T(com.mypackage.Ticket.State).values()}" 
      th:value="${state}" 
      th:text="${state}"> 
    </option> 
</select> 
+2

T'nin amacı nedir? – saml

+2

Bir yayına erişme ve statik yöntemleri başlatma veya içinde statik özellikler alma için yay EL sözdizimi. Http://docs.spring.io/spring/docs/current/spring-framework-reference/html/expressions.html#expressions-types – jchampemont

+1

Açık: th: value = $ {{state}} 'dönüşüm etiketlerini kullanın –

15

, sen ayırmak istiyorsanız denetleyicisi böyle bir şey yapabileceği otomatik böylece seçilen değeri de bilet aktarılması gerektiğini

public static enum State { 

    OPEN("open"), 
    IN_WORK("in work"), 
    FINISHED("finished"); 

    private final String displayName; 

    State(String displayName) { 
     this.displayName = displayName; 
    } 

    public String getDisplayName() { 
     return displayName; 
    } 
} 

Ve de: GUI görüntülenen dizesinden enum sıralı ad, örneğin, bir displayName ek özellikler eklemek html dosyası:

<select> 
    <option th:each="state : ${T(com.mypackage.Ticket.State).values()}" th:value="${state}" th:text="${state.displayName}"></option> 
</select> 

Bu kullanıcıya displayName sunmak ve sessizce kodu üstlenmeden olmadan daha sonra bu dizeleri değiştirmenizi sağlar olacak. Bu şekilde th: title gibi daha fazla özellik ekleyebilirsiniz.

+0

Aynı sonucu toString'i geçersiz kılarak nasıl elde edebiliriz, ya da yapamayız? – atas

+0

@atas evet toString'i geçersiz kılabilirsiniz() – Nikki

İlgili konular