Nejlepsi bude tenhle dotaz polozit primo ve foru Hibernate Validatoru.
Jinak pokud ten kontext to API nenabizi (kouknete se radeji dvakrat),
tak si jej udelejte pomoci tridy ThreadLocal
(http://download.oracle.com/javase/6/docs/api/java/lang/ThreadLocal.html).
[code]
public final class ValidationContext {
private static final ValidationContext instance = new
ValidationContext();
private final ThreadLocal holder = new ThreadLocal();
public void set(Object value) {
holder.set(value);
}
public Object get() {
return holder.get();
}
public static ValidationContext getContext() {
return instance;
}
}
[/code]
Samozrejme bych doporucil udelat to typove a do ValidationContext
neukladat Object, ale nejaky vas objekt.
2010/8/16 <[email protected]>:
>
> Dobry den,
> je treba refaktorovat validacni modul nasi aplikace a mel jsem v umyslu k
> tomu vyuzit specifikaci JSR303 a jeji referencni implementaci Hibernate
> validator verze 4.
>
> Po prvnim seznameni a odzkouseni mi tam pro me ucely chybi dve veci, ktere
> ukazu na vymyslenem prikladu :
> Mejme obecny graf, kde je nejaky objekt Uzel, ktery ma potomky KorenovyUzel a
> dalsi nespecifikovany pocet potomku. Kazdy uzel ma atributy vstupniHrany,
> vystupniHrany a kodUzlu.
>
> Pokud budu chtit otestovat, ze dana struktura je strom, pak musi byt splnena
> validace:
> @Size(max = 1)
> Set<Hrana> vstupniHrany;
> pro vsechny Uzly s vyjimkou KorenovyUzel.
>
> A ted me problemy :
> 1, chtel bych validaci @Size(max=1) umistit na predka Uzel a na potomkovi
> KorenovyUzel je "prekryt" @Size(max=0) a vyhnout se tak nutnosti rozepisovat
> validaci na vsech potomcich tridy Uzel (hierarchie trid modelu je finalni a
> nemuzu ji menit), pripadne vyjmenovavat v prislusnem validatoru (obecne to
> bude custom validace), pro ktere tridy se validace chova jinak !
>
> 2, standartnim mechanismem v MessageInterpolator byt schopen na zaklad
> template zadane v externim textovem souboru (ValidationMessages.properties)
> zobrazit kodUzlu.
> Resenim pro me neni vytvaret template ve validatoru ! Validator se bude
> pouzivat v ruznych kontextech a s jinymi validacnimi zpravami (dle atributu
> message prislusne anotace) a zpravy musi byt modifikovatelne pouze na zaklade
> textoveho souboru.
> Ma predstava byla, ze validator pri objevene chybe na Uzlu s kodem "Uzel77"
> vlozi "referenci" a jeji obsah (napr. {kodUzlu} a "Uzel77") do nejakeho
> "kontextu" a behem prekladu zpravy v MessageInterpolator pokud bude v
> template retezec {kodUzlu} tak ho nahradi textem Uzel77.
> Nicmene, zadny "kontext", ktery by mi toto umoznoval jsem nenasel a jedine
> "reseni", ktere me napadlo bylo pridavat to do defaultni sablony ve forme
> klic = hodnota (odkud se tato cast odebere pred defaultnim
> MessageInterpolatorem a pote se nahradi "rucne"). Ale prijde mi to trochu
> pres ruku.
> Resenim pomoci ConstraintViolation je jiz pozde (pouze validator "vi", co
> presne validuje a jaka atributy se z validovaneho objektu "hodi" pro popis).
>
> Prosim o Vase zkusenosti s touto specifikaci a zda je nejake "obvykle" reseni
> jak tyto dve omezeni obejit.
> Dekuji za Vas cas
> Martin
>
--
S pozdravem Roman "Dagi" Pichlik
/* http://dagblog.cz/ Blog pro kodery */