Hlavní menu

Nástroje

WebKiv / OpenCmsValidaceVstupnichPoliFormularu

View (print) - Edit page | Recent changes - Page history

Updated 30 June 2009, 09:21 by JaroslavPavuk

WebKiv.OpenCmsValidaceVstupnichPoliFormularu History

Hide minor edits - Show changes to markup

30 June 2009, 09:21 by JaroslavPavuk -
Changed lines 86-90 from:
  • Metoda validate slouží k vlastní validaci formuláře. Pravidla pro validaci určuje programátor. Najde-li validátor nevalidní hodnotu ve formuláři, musí nad objektem errors zavolat metodu rejectError(), kde první parametr je jméno vlastnosti validovaného objektu, ke kterému náleží daná chyba a druhý parametr je klíč, pod kterým se má hledat lokalizovaná zpráva v messages_xx.properties, která se následně zobrazí na jsp stránce formuláře.
to:
  • Metoda validate slouží k vlastní validaci formuláře. Pravidla pro validaci určuje programátor. Najde-li validátor nevalidní hodnotu ve formuláři, musí nad objektem errors zavolat metodu rejectError(), kde první parametr je jméno vlastnosti validovaného objektu, ke kterému náleží daná chyba a druhý parametr je klíč, pod kterým se má hledat lokalizovaná zpráva v messages_xx.properties, která se následně zobrazí na jsp stránce formuláře.

Zpět na FrameworkyProWebKiv

29 June 2009, 23:13 by Tomas Peterka -
Added lines 1-86:

Validace vstupních polí

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.

Instalace

Není třeba instalovat nic nad rámec Spring frameworku verze 2.0 a vyšší.

Konfigurace

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>

Třída validátoru

Vlastní validátor je svázán s formulářem, který je namapován na jeden konkrétní domévý objekt.

Provázání s formulářem z jsp stránek

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.

Vlastní validování

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);
    }
  }
}
  • V metodě supports se kontroluje, zda je objekt přiřaditelný příchozímu argumentu.
  • Metoda validate slouží k vlastní validaci formuláře. Pravidla pro validaci určuje programátor. Najde-li validátor nevalidní hodnotu ve formuláři, musí nad objektem errors zavolat metodu rejectError(), kde první parametr je jméno vlastnosti validovaného objektu, ke kterému náleží daná chyba a druhý parametr je klíč, pod kterým se má hledat lokalizovaná zpráva v messages_xx.properties, která se následně zobrazí na jsp stránce formuláře.