2010-11-19 23 views
12

Có cách nào để hiển thị nhiều hơn một tên trường trong optionValue không?Chúng ta có thể có nhiều trường trong g: chọn optionValue không?

<g:select name="id" from="${Books.list()}" optionKey="id" 
      value="" optionValue="name" 
      noSelection="${['null':'Select Publisher...']}"/> 

expe:

<g:select name="id" from="${Books.list()}" optionKey="id" 
      value="" optionValue="name and author" 
      noSelection="${['null':'Select Publisher...']}"/> 

Trả lời

10

Bạn có thể giới thiệu một tài sản thoáng qua trong lớp tên miền của bạn, mà bạn có thể sử dụng trong optionValue của g: chọn:

class Book { 
    String name 
    String author 

    static transients = [ 'nameAndAuthor' ] 

    public String getNameAndAuthor() { 
     return "$name, $author" 
    } 
} 

g của bạn: chọn giao diện như sau:

<g:select name="id" from="${Books.list()}" optionKey="id" value="" 
    optionValue="nameAndAuthor" 
    noSelection="${['null':'Select Publisher...']}" /> 
+0

thanksDaniel Engmann – Honey

38

Bạn có thể vượt qua một đóng cửa cho giá trị tùy chọn của bạn nếu bạn không muốn thay đổi lớp miền của bạn:

<g:select name="id" from="${Books.list()}" optionKey="id" 
      value="" optionValue="${{it.name +' '+it.author}}" 
      noSelection="${['null':'Select Publisher...']}"/> 
+0

Điều này hoạt động tuyệt vời nhưng IDE của tôi (IntelliJ) đang đánh dấu điều này là một lỗi khối mã không rõ ràng. Có ai xung quanh chuyện này không? – RasTheDestroyer

+0

Tôi luôn quên cách tôi có thể thực hiện điều đó! Cảm ơn! = D – ricardogobbo

5

Hoặc thêm một phương pháp toString đến lớp Book của bạn

public String toString() { 
"${name} ${author}" 
} 

sau đó chỉ cần bỏ qua optionValue

<g:select name="id" from="${Books.list()}" optionKey="id" 
      value="" noSelection="${['null':'Select Publisher...']}"/> 

Khi đó, khi bạn nhìn vào miền trong trình gỡ lỗi, bạn có giá trị dễ nhận biết.

Hy vọng điều này sẽ hữu ích.

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