WebKiv: OpenCmsValidaceVstupnichPoliFormularu |
from Wiki KIVu |
Máme-li v modulu formulář, u kterého je požadavek na validaci jednoho nebo více vstupních polí před zpracováním formuláře, hodí se nám použití validátorů z návrhu aplikace podle Springu.
Není třeba instalovat nic nad rámec Spring frameworku verze 2.0 a vyšší.
Prvním krokem je přidání beany validátoru do applicationContext.xml.
<bean id="zalozOsobuFormValidator" class="cz.zcu.kiv.opencms.springmvcapp.validator.ZalozOsobuFormValidator"> <property name="osobaManager" ref="osobaManager" /> </bean>
Následuje navázání beany validátoru ke controlleru v springmvcapp-servlet.xml.
<bean name="zalozosobuController" class="cz.zcu.kiv.opencms.springmvcapp.controllers.ZalozOsobuFormController"> <property name="validator" ref="zalozOsobuFormValidator" /> ... </bean>
Vlastní validátor je svázán s formulářem, který je namapován na jeden konkrétní domévý objekt.
Zkrácená podoba jsp stránky náležící danému controlleru:
<form:form method="post" commandName="zalozosobu">
<table>
<tr>
<td>Jmeno:</td>
<td><form:input path="jmeno" /></td>
<td><form:errors path="jmeno" cssClass="error"/></td>
</tr>
<tr>
<td>Prijmeni:</td>
<td><form:input path="prijmeni" /></td>
<td><form:errors path="prijmeni" cssClass="error"/></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="Ulozit osobu" />
</td>
</tr>
</table>
</form:form>
Namespace, chcete-li jmenný prostor form je použit ze Springu a je třeba mít v záhlaví stránky následující kód:
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
Namespace je zde použit pro provázání validovaného formuláře s vlastním validátorem, respektive pro namapování na konkrétní objekt. Ve výše uvedém příkladu je namapováno pouze jméno a příjmení z objektu Osoba přes form:input, kde path říká, na co konkrétně je dané pole namapováno. Řádek začínající form:errors pro danou path je v příkladu uveden proto, aby případné nevalidní řádky mohly být označeny jako nevalidní patřičným řetězcem z validátoru.
Třída ve zkrácené podobě musí vypadat následovně:
public class ZalozOsobuFormValidator implements Validator {
@Override
public boolean supports(Class arg0) {
return Osoba.class.isAssignableFrom(arg0);
}
@Override
public void validate(Object arg0, Errors errors) {
Osoba osoba = (Osoba) arg0;
/* Je jmeno delsi nez 2 znaky? */
if (osoba.getJmeno() != null && osoba.getJmeno().length() < 3) {
errors.rejectValue("jmeno", "error.shortName", null, null);
}
}
}
Zpět na FrameworkyProWebKiv