2010-11-02 33 views
8

Tôi là một newbie trong grails và groovy. Tôi có một lớp miền dự án với ngày bắt đầu và ngày kết thúc. Tôi muốn đặt trong một ràng buộc xác định rằng ngày kết thúc cần phải lớn hơn ngày bắt đầu (và sau đó thêm một đối tượng con khác của dự án cần có ngày bắt đầu và ngày kết thúc của nó xác thực với ngày của dự án mẹ). Điều này có thể xảy ra với hạn chế tối thiểu hay tôi phải đặt nó ở nơi khác? Ràng buộc duy nhất cho phép hai thuộc tính được liên kết theo cách đó, hy vọng các ràng buộc min/max cho phép điều đó. Tôi đã thửRàng buộc tối thiểu của Grails để xác thực ngày

startDate(blank:false) 
endDate(blank:false, min:'startDate') 

Nó ném một lỗi nói rằng STARTDATE tài sản không có sẵn trên Project

+0

Câu trả lời của tôi giả định rằng 'endDate' được định nghĩa là' java.util.Date'. Điều này có đúng không? Nếu không, vui lòng chỉ định nó là gì và tôi sẽ cập nhật câu trả lời của tôi cho phù hợp. –

+0

Có ngày thường xuyên của nó. Đã hy vọng các hạn chế min sẽ áp dụng cho rằng quá .. Cảm ơn câu trả lời :) Vì vậy, min chỉ áp dụng cho các số nguyên, phải không? –

+0

Vâng, 'phút 'có thể áp dụng tốt cho các giá trị' Ngày'. Tuy nhiên, tôi không tin rằng bạn có thể sử dụng giá trị động (nghĩa là một giá trị trường khác) trong định nghĩa ràng buộc của bạn cho 'min' vì' ràng buộc' là một kết thúc tĩnh. Bạn có thể làm 'endDate (min: new Date())', mặc dù, không có vấn đề gì. –

Trả lời

13

Hãy thử sử dụng một validator tùy chỉnh:

static constraints = { 
    endDate(validator: { val, obj -> 
     val?.after(obj.startDate) 
    }) 
} 

val được giá trị của lĩnh vực và obj là một tham chiếu đến đối tượng đang được xác thực. Việc đóng cửa có thể chứa bất kỳ logic nào bạn cần, vì vậy bạn có thể mở rộng xác thực theo cách bạn mô tả trong câu hỏi của mình (bằng cách truy cập các đối tượng con bạn tham khảo bằng cách sử dụng obj).

Trình xác thực tùy chỉnh khá linh hoạt. Hãy xem the documentation. Lý tưởng nhất là bạn sẽ muốn trả lại một tin nhắn tùy chỉnh; làm thế nào để làm điều đó cũng có thể được tìm thấy trong các tài liệu liên kết ở trên.

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