2012-02-10 23 views
6

Tôi đang cố gắng sử dụng Grails Scaffolding để ném một ứng dụng CRUD nhanh chóng cùng với một số bảng cơ sở dữ liệu cũ (xem this previous StackOverflow question cho saga). Tôi bây giờ đã vượt qua những điều tồi tệ nhất của các vấn đề, và có một ứng dụng CRUD hoạt động, nhưng có một vấn đề còn lại với khả năng sử dụng chung.Grails Giàn giáo với các nhãn thân thiện (thay vì các khóa ID) cho các hiệp hội khóa ngoài

Nhiều đối tượng miền của tôi có các liên kết khóa ngoài với các đối tượng miền khác. Một Contact thuộc về một Owner vv

Tuy nhiên, trên các trang CRUD cho Contact, tôi không muốn nhìn thấy id trọng thực tế cho Owner ... bởi vì đó không có nghĩa là bất cứ điều gì cho người sử dụng của con người. Thay vào đó, tôi muốn giá trị Owner.name thân thiện với con người hơn hiển thị trên màn hình.

Chế độ xem "danh sách" và "hiển thị" rõ ràng xử lý tất cả các thuộc tính trong mã được tạo tự động của Chế độ xem và tôi có khả năng tinh chỉnh mã đó để kiểm soát nội dung được hiển thị. Tuy nhiên, chế độ xem "tạo" và "chỉnh sửa" không liệt kê tất cả các thuộc tính. Thay vào đó, các Chế độ xem đó thực hiện một số loại gọi là Grails taglib như sau:

... 
<fieldset class="form"> 
    <g:render template="form"/> 
</fieldset> 
... 

Cuộc gọi này có vẻ tự động phát hiện khi chạy trường và tự quyết định cách hiển thị chúng. Đối với các đối tượng miền có liên kết, nó làm cho quyết định xấu hiển thị ID vô nghĩa của đối tượng được liên kết chứ không phải thuộc tính thân thiện với con người hơn.

Có cách nào "dễ dàng" (hoặc ít nhất là "thực hành tốt nhất") để thay đổi cách trường được hiển thị trên chế độ xem "chỉnh sửa" hoặc "tạo" không? Chắc chắn đây là một vấn đề phổ biến bất cứ khi nào sử dụng Scaffolding được sử dụng với các đối tượng miền có các liên kết.

+0

Đây là vấn đề phụ, nhưng sau này tôi phát hiện đoạn mã này ở trên chỉ đơn giản là kéo HTML từ tệp "_form.gsp", được tạo tự động trong cùng thư mục với chế độ xem được tạo tự động cho đối tượng miền đó . –

Trả lời

15

Oh, duh ... bạn có thể chỉ cần thực hiện một phương pháp "toString()" trên đối tượng miền liên quan, có nó trở lại lĩnh vực mà bạn muốn sử dụng cho mục đích hiển thị:

class Owner { 

    String id // not human-friendly 
    String name // human-friendly 
    // ...etc... 

    String toString() { 
     return name 
    } 
} 

Bây giờ khi bạn đang ở trên Chế độ xem CRUD cho Contact, có trường cho liên kết Owner, nội dung được hiển thị trên màn hình là thuộc tính Owner.name thay vì Owner.id hoặc một số tham chiếu đối tượng xấu xí.

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