Convalida i vincoli di convalida del bean a livello di class in JSF

Sembra che JSF 2.0 non chiami “limiti di livello di class“. Citando da una risposta SO

JSF 2.0 non chiama i vincoli di convalida a livello di class. Dalla convalida JSF: JSF 2 fornisce integrazione integrata con i vincoli JSR-303. Quando si utilizza la convalida del bean nell’applicazione, JSF utilizza automaticamente i vincoli per i bean a cui fanno riferimento valori UIInput.

La risposta suggerisce inoltre l’uso di SeamFaces per convalidare comunque i vincoli a livello di class.

Sfortunatamente questa è una non-opzione, dal momento che introduce una dipendenza piuttosto massiccia solo per la convalida di ciò che dovrebbe essere comunque validato.

La mia domanda quindi è:

Come posso convincere JSF a convalidare i vincoli a livello di class?

La convalida manuale nel controller è noiosa e un sacco di codice ripetuto, e quindi un’opzione che vorrei evitare.

Ho tentato di farlo annotando il campo del controller da convalidare con @Valid , il che non ha aiutato.

Immagino che dovrebbe essere ansible o fare in modo che la fase di “Process Validations” faccia per me o colbind qualcosa di simile a un Filter dopo la fase “Aggiorna valori di modello”, che eseguirà centralmente i valori del modello attraverso una convalida.

Fino al prossimo JSF 2.3, JSF non supporta la convalida a livello di class usando ao @Valid . Questo è un problema eterno, dato che il primo problema con le specifiche JSF lo ha mai affrontato.

Il tuo resort utilizza una libreria di terze parti che si è già occupata di esso, o l’homebrewing in base alle fonti della libreria open source in questione (prendendo in considerazione le licenze).

Oltre a SeamFaces che hai già trovato, c’è anche OmniFaces . La differenza principale rispetto a è che non usa un Validator JSF , ma un ConstraintValidator JSR303 (e che hai l’intera quadro immediatamente a portata di mano senza la necessità di dichiarare e annotare un gruppo di campi, ripetendo le proprietà dell’entity framework.

Il supporto per JSF 2.3 sarà disponibile in che si basa in gran parte su OmniFaces .