2010-10-26 41 views
5

Tôi đang sử dụng plugin Grails Webflow. Dưới đây là các đối tượng miền tôi đang làm việc với:Tôi làm cách nào để giả mạo lỗi xác thực?

class Foo implements Serializable { 
    String fooProp1, 
      fooProp2 

    static constraints = { 
     fooProp2 nullable: false 
    } 
} 

class Bar implements Serializable { 
    Foo fooObject 

    static constraints = { 
     fooObject nullable: false 
    } 
} 

Tại một thời điểm trong luồng web, tôi cần đảm bảo rằng fooObject.fooProp1 không rỗng. Nếu có, tôi muốn ném một lỗi và buộc người dùng cung cấp nó với một giá trị. Tôi đã thử sử dụng validate() để làm điều này (trên cả hai đối tượng Bar và Foo), nhưng vì fooProp1 có thuộc tính nullable: true, nó vượt qua xác thực. Bất kỳ ý tưởng?

+0

Tôi hơi bối rối - nếu đây là trường hợp, không nên thuộc tính chỉ là 'nullable: false'? Bạn có thể làm rõ lý do tại sao bạn không thể thêm ràng buộc vào miền của mình không? Đó là giải pháp rõ ràng nhất đối với tôi, tôi đoán vậy. –

+0

Vâng, các đối tượng Foo được phép tồn tại trong cơ sở dữ liệu mà không có một fooProp1 được chỉ định. Tuy nhiên, trong luồng web, thuộc tính này không cần phải rỗng, vì nó được sử dụng ở cuối quy trình luồng web. – Pat

Trả lời

10

Có thể bạn có thể làm điều này trong luồng Web bằng thích nghi với các đoạn mã sau:

if(fooObject.fooProp1 == null) { 
    fooObject.errors.rejectValue('fooProp1', 'nullable') 
} 

Các số thứ hai phương pháp đó, 'nullable', thể khác nhau đối với tình hình của bạn. Bạn sẽ chỉ cần đặt nó vào mã thông báo (từ message.properties) để hiển thị thông báo lỗi mà bạn muốn.

Có giao diện here để biết thêm các cách sử dụng reject()rejectValue().

+0

Cảm ơn, đó là những gì tôi đang tìm kiếm. – Pat

+0

Đúng, không sao cả. –

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