Formuláře

Formulářové controly jsou umístěny ve vlastním namespace. Jejich tagy mají prefix f:, na rozdíl od je: základních controlů systému JellyPot. Celý formulář se umísťuje do serverového tagu <form>. Ten se může ve stránce vyskytovat jen jedenkrát (vlastnost ASP.NET).

JellyPot podporuje dva typy formulářů – <f:CollectionForm>, který slouží k uložení dat z formuláře do kolekce přístupné přes administrační rozhraní, a <f:EmailForm>, který navíc umí data poslat i na zvolený email.

Validace

Data z odeslaného formuláře lze na straně serveru validovat. V případě chybně vyplněného formuláře se zobrazí patřičná chybová hláška pomocí controlu <f:ErrMsgs>. Pravidla pro validaci se definují u controlů <f:input>, <f:textarea><f:select> pomocí atributu validateAs. Možné hodnoty tohoto atributu jsou:

  • None – výchozí chování, stejně jako pokud není atribut validateAs vůbec uveden. Neprovádí se žádné ověření dat.
  • NotEmpty – pole nesmí být prázdné, musí obsahovat alespoň jeden znak. Za takové znaky nejsou považovány tzv. bílé znaky (mezery, tabulátory atp). Tj. pole vyplněné pouze mezerami je v tomto případě nevalidní.
  • Int, IntOrEmpty – pole musí obsahovat celé číslo (kladné, záporné) nebo nulu (případně zůstat prázdné).
  • Decimal, DecimalOrEmpty – pole musí obsahovat celé nebo desetinné číslo (případně zůstat prázdné). Jako desetinná čárka může být použitá čárka i tečka, mezery vložené mezi číslice nejsou rozhodující.
  • Date, DateOrEmpty – pole musí obsahovat platné datum (případně zůstat prázdné). Možné formáty zadání jsou d.m, d/m, d.m.yyyy, d/m/yyyy
  • Email, EmailOrEmpty – pole musí obsahovat řetězec, který je možné interpretovat jako mailovou adresu (případně zůstat prázdné).
  • RegExp – hodnota pole je ověřena proti regulárnímu výrazu, který je potřeba zapsat do atributu validateData. Regulární výraz je potřeba zapsat v syntaxi platné pro Microsoft .NET Framework.

Při odeslání formuláře na server JellyPot ověří obsah všech polí, které mají uvedený atribut validateAs. Pokud některé validací neprojde, formulář se dále nezpracovává. V odpovědi serveru se odešle stránka, kde jsou pole s chybou označena třídou notValid a control <f:errMsgs> vypíše chybové hlášky z příslušných atributů errTextValue, resp. z uzlu textového souboru určeného atributem errText.

.NET prostředí obsahuje zabezpečení proti odeslání HTML obsahu. Toto chování je možné vypnout pro jednotlivé formulářové pole atributem allowHtml="true" nebo na celé stránce pomocí direktivy:
<%@ Page ValidateRequest="false" %>

Příklad

<form method="post" runat="server">
    <f:CollectionForm runat="server" id="contact" targetCollection="message">
        <formTemplate>
            <label>Vaše jméno*  <f:input runat="server"
                                         id="name"
                                         targetField="name"
                                         validateAs="NotEmpty"
                                         errTextValue="Jméno musíte zadat" />
            </label>
            <label>Email*       <f:input runat="server"
                                         id="email"
                                         targetField="email"
                                         validateAs="Email"
                                         errTextValue="Není platný email" />
            </label>
            <label>Zpráva*      <f:textarea runat="server"
                                            id="message"
                                            targetField="message"
                                            validateAs="NotEmpty"
                                            errTextValue="Zprávu musíte zadat" />
            </label>
            <f:errMsgs runat="server" tag="p" separator="<br />" />
            <f:sendButton runat="server" textValue="Odeslat" />
        </formTemplate>
        <sentTemplate>
            <p>Zpráva byla odeslána. Díky!</p>
        </sentTemplate>
    </f:CollectionForm>
</form>

Připomínky a postřehy

Máte-li nějakou připomínku, dobrý nápad nebo jste našli v dokumentaci chybu, rádi od vás uslyšíme.