2012-07-26 4 views
6

나는 다음과 같은 콤보가 :Grails의 g : 어떤 선택을 선택

: 내가 설정을했습니다

<g:select name="ticketType" from="${app.domain.enums.TicketType?.values()}" 
           keys="${app.domain.enums.TicketType.values() }" 
           value="${ticketInstance?.ticketType}" 
           noSelection="${['null': 'Select One...']}" 
        /> 

을 TicketType은 매우 간단한 열거입니다

ticketType nullable: true, blank:true 

명령 개체에 ticketType에 대한 다음과 같은 제약 조건

public enum TicketType { 
     QUESTION, SUPPORT, MAINTENANCE, NEW_FUNCTIONALITY, MALFUNCTION 
} 

그리고 GSP에 ticketType 값을 설정하지 않을 때마다 다음 오류가 표시됩니다.

Failed to convert property value of type 'java.lang.String' to required type 'com.coming.enums.TicketPriority' 

선택이없는 경우 g : select는 "null"(문자열) 값을 설정합니다.

무엇이 누락 되었습니까?

+0

당신의'g : select' 코드를 보여주세요 ... – aiolos

+0

@aiolos 죄송합니다 - 포맷하는데 약간의 오류가있었습니다. 내 게시물을 수정했습니다. – drago

답변

14

오히려 '널 (null)'문자를 사용하는 것보다, 당신은 빈 문자열을 사용하여 시도가 당신의 noSelection 속성? 예 : noSelection="${['':'Select One...']}"? 데이터 바인딩 중 실제 null 값으로 적절한 변환을 수행 할 수 있습니다.

+0

그게 일반적이지만 어떻게 작동합니까? 그래서 나는 다른 옵션으로 연주했습니다. 그 동안 컨트롤러와 서비스에서 일부 코드를 변경하고 noSelection을 noSelection = "$ {[ '': 'Select One ...']}로 반환하면 이제 작동합니다. Gremlins :) – drago

2

오류 메시지에 - 귀하는 noSelection에 문자열이 있습니다. 이것은 어떤 enum 값으로도 변환 될 수 없습니다.

당신의 null의 인용 부호를 제거하고 (이것은 Grails는 2.0 나를 위해 작동) 작동합니다 :

<g:select name="ticketType" from="${app.domain.enums.TicketType?.values()}" 
          keys="${app.domain.enums.TicketType.values() }" 
          value="${ticketInstance?.ticketType}" 
          noSelection="${[null: 'Select One...']}"/> 
+0

나는 allready를 시도했지만 아직 작동하지 않습니다. 다른 아이디어? – drago

+0

g : select는 HTML 생성을 끝내기 때문에 null 주위의 인용문에는 아무런 차이가 없으므로 value = "null"을 나타낼 것입니다. – Deigote

관련 문제