2010-11-02 16 views
8

Soy un novato en grial y maravilloso. Tengo una clase de dominio Project con fecha de inicio y finalización. Quiero poner una restricción que especifique que la fecha de finalización debe ser mayor que la fecha de inicio (y luego otro objeto secundario del proyecto debe tener su fecha de inicio y enddate validadas con las fechas del proyecto principal). ¿Es esto posible con la restricción mínima o tengo que ponerlo en otro lugar? La restricción única permite que dos propiedades se vinculen de esa manera, esperando que las restricciones mínimas/máximas lo permitan. He tratadoRestricción mínima de Grails para la validación de fecha

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

Se genera un error diciendo que el startDate propiedad no está disponible en Proyecto

+0

Mi respuesta es asumir que 'endDate' se define como' java.util.Date'. ¿Es esto correcto? De lo contrario, especifique qué es y actualizaré mi respuesta en consecuencia. –

+0

Sí, es una fecha normal. Esperaba que la restricción mínima se aplicara a eso también ... Gracias por la respuesta :) Entonces, min solo se aplica a los enteros, ¿no? –

+0

Bueno, 'min' puede aplicarse muy bien a los valores de' Fecha'. Sin embargo, no creo que pueda usar un valor dinámico (es decir, otro valor de campo) en su definición de restricción para 'min' ya que' constraints' es un cierre estático. Sin embargo, podría hacer 'endDate (min: new Date())' sin problemas. –

Respuesta

13

intentar usar un validador personalizado:

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

val es el valor del campo y obj es una referencia al objeto que se valida. El cierre puede contener cualquier lógica que necesite, de modo que puede extender su validación de la manera que está describiendo en su pregunta (accediendo a los objetos secundarios a los que hace referencia usando obj).

El validador personalizado es bastante flexible. Eche un vistazo al the documentation. Idealmente, querrás devolver un mensaje personalizado; cómo hacerlo también se puede encontrar en los documentos vinculados anteriormente.

Cuestiones relacionadas