Utveckla Forms (Classic UI) developing-forms-classic-ui
En formulärs grundläggande struktur är:
- Formulärstart
- Formulärelement
- Formulärslut
Alla dessa uppnås med en serie standardkomponenter för formulär som är tillgängliga i en AEM standardinstallation.
Förutom att utveckla nya komponenter för användning i dina formulär kan du även:
Använda skript för att utöka funktioner där det behövs.
Förhandsladda formulärvärden preloading-form-values
Formulärstartkomponenten innehåller ett fält för Läs in sökväg, en valfri sökväg som pekar mot en nod i databasen.
Läs in sökväg är sökvägen till nodegenskaper som används för att läsa in fördefinierade värden till flera fält i formuläret.
Detta är ett valfritt fält som anger sökvägen till en nod i databasen. När den här noden har egenskaper som matchar fältnamnen förinläses motsvarande fält i formuläret med egenskapsvärdet. Om det inte finns någon matchning innehåller fältet standardvärdet.
FormsHelper#setFormLoadResource
inuti init.jsp
.Förhandsladda formulärfält med flera värden preloading-form-fields-with-multiple-values
Olika formulärfält har även objektets inläsningssökväg, som är en valfri sökväg som pekar på en nod i databasen.
Objektets inläsningssökväg är sökvägen till nodegenskaper som används för att läsa in fördefinierade värden i det specifika fältet i formuläret, till exempel en listruta, kryssrutegrupp eller alternativgrupp.
Exempel - Förhandsladda en listruta med flera värden example-preloading-a-dropdown-list-with-multiple-values
En nedrullningsbar lista kan konfigureras med ditt värdeintervall för val.
Objektets inläsningssökväg kan användas för att komma åt en lista från en mapp i databasen och läsa in dessa i fältet i förväg:
-
Skapa en systemstängningsmapp (
sling:Folder
)
till exempel/etc/designs/<myDesign>/formlistvalues
-
Lägg till en ny egenskap (till exempel
myList
) av typen flervärdessträng (String[]
) som ska innehålla listan med nedrullningsbara objekt. Innehåll kan också importeras med hjälp av ett skript, till exempel med ett JSP-skript eller cURL i ett gränssnittsskript. -
Använd den fullständiga sökvägen i fältet Objektets inläsningssökväg:
till exempel/etc/designs/geometrixx/formlistvalues/myList
Observera att om värdena i String[]
har följande format:
AL=Alabama
AK=Alaska
och så vidare, genererar AEM listan som:
<option value="AL">Alabama</option>
<option value="AK">Alaska</option>
Den här funktionen kan till exempel användas på ett bra sätt i en flerspråkig inställning.
Utveckla egna formuläråtgärder developing-your-own-form-actions
Ett formulär behöver en åtgärd. En åtgärd definierar den åtgärd som utförs när formuläret skickas med användardata.
En rad åtgärder ingår i en standardinstallation av AEM, som beskrivs nedan:
/libs/foundation/components/form/actions
och i listan Åtgärdstyp för komponenten Form:
I det här avsnittet beskrivs hur du kan utveckla egna formuläråtgärder som ska tas med i den här listan.
Du kan lägga till din egen åtgärd under /apps
enligt följande:
-
Skapa en nod av typen
sling:Folder
. Ange ett namn som återspeglar den åtgärd som ska implementeras.Till exempel:
/apps/myProject/components/customFormAction
-
På den här noden definierar du följande egenskaper och klickar sedan på Spara alla för att behålla ändringarna:
-
sling:resourceType
- anges somfoundation/components/form/action
-
componentGroup
- definiera som.hidden
-
Valfritt:
-
jcr:title
- ange en valfri titel som visas i den nedrullningsbara listan. Om inget anges visas nodnamnet -
jcr:description
- ange en beskrivning av ditt val
-
-
-
Skapa en dialognod i mappen:
- Lägg till fält så att författaren kan redigera formulärdialogrutan när åtgärden har valts.
-
I mappen skapar du antingen:
-
Ett postskript.
Skriptnamnet ärpost.POST.<extension>
, till exempelpost.POST.jsp
Skriptet anropas när ett formulär skickas för att bearbeta formuläret, det innehåller koden som hanterar data som kommer från formuläretPOST
. -
Lägg till ett framåt-skript som anropas när formuläret skickas.
Skriptnamnet ärforward.<extension
>, till exempelforward.jsp
Skriptet kan definiera en sökväg. Den aktuella begäran vidarebefordras sedan till den angivna sökvägen.
Det nödvändiga anropet är
FormsHelper#setForwardPath
(2 varianter). Ett typiskt fall är att utföra viss validering, eller logik, för att hitta målsökvägen och sedan gå vidare till den sökvägen, så att standardserverservern för Sling-POST kan utföra den faktiska lagringen i JCR.Det kan också finnas en annan server som utför den faktiska bearbetningen, i så fall fungerar formuläråtgärden och
forward.jsp
fungerar bara som"limkod". Ett exempel på detta är e-poståtgärden på/libs/foundation/components/form/actions/mail
, som vidarebefordrar information till<currentpath>.mail.html
där en e-postserver finns.Så:
- en
post.POST.jsp
är användbar för små åtgärder som utförs helt av själva åtgärden - medan
forward.jsp
är användbart när endast delegering krävs.
Körningsordningen för skripten är:
-
När formuläret återges (
GET
):init.jsp
- för alla fältbegränsningar:
clientvalidation.jsp
- formulärets validationRT:
clientvalidation.jsp
- formuläret läses in via inläsningsresurs om det är inställt
addfields.jsp
vid återgivning av<form></form>
-
vid hantering av ett formulär
POST
:-
init.jsp
-
för alla fältbegränsningar:
servervalidation.jsp
-
formulärets validationRT:
servervalidation.jsp
-
forward.jsp
-
om en framåtriktad sökväg har angetts (
FormsHelper.setForwardPath
) vidarebefordrar du begäran och anropar sedancleanup.jsp
-
om ingen framåtriktad sökväg har angetts, anropa
post.POST.jsp
(avslutas här, ingencleanup.jsp
har anropats)
-
-
-
Lägg till igen i mappen om du vill:
-
Ett skript för att lägga till fält.
Skriptnamnet äraddfields.<extension>
, till exempeladdfields.jsp
Ettaddfields
-skript anropas omedelbart efter att HTML för att starta formuläret har skrivits. Detta gör att åtgärden kan lägga till anpassade inmatningsfält eller andra liknande HTML i formuläret. -
Ett initieringsskript.
Skriptnamnet ärinit.<extension>
, till exempelinit.jsp
Skriptet anropas när formuläret återges. Den kan användas för att initiera åtgärdsinformation. -
Ett rensningsskript.
Skriptnamnet ärcleanup.<extension>
, till exempelcleanup.jsp
Det här skriptet kan användas för att rensa.
-
-
Använd komponenten Forms i en parsys. Listrutan Åtgärdstyp innehåller nu din nya åtgärd.
note note NOTE Så här visar du standardåtgärder som ingår i produkten: /libs/foundation/components/form/actions
Utveckla egna formulärbegränsningar developing-your-own-form-constraints
Begränsningar kan införas på två nivåer:
Begränsningar för enskilda fält constraints-for-individual-fields
Du kan lägga till egna begränsningar för ett enskilt fält (under /apps
) enligt följande:
-
Skapa en nod av typen
sling:Folder
. Ange ett namn som återspeglar den begränsning som ska implementeras.Till exempel:
/apps/myProject/components/customFormConstraint
-
På den här noden definierar du följande egenskaper och klickar sedan på Spara alla för att behålla ändringarna:
-
sling:resourceType
- inställt påfoundation/components/form/constraint
-
constraintMessage
- ett anpassat meddelande som visas om fältet inte är giltigt enligt begränsningen när formuläret skickas -
Valfritt:
jcr:title
- ange en valfri titel som visas i urvalslistan. Om inget anges visas nodnamnethint
- ytterligare information för användaren om hur fältet används
-
-
I den här mappen kan du behöva följande skript:
-
Ett klientvalideringsskript:
Skriptnamnet ärclientvalidation.<extension>
, till exempelclientvalidation.jsp
Detta anropas när formulärfältet återges. Den kan användas för att skapa javascript för klienten för att validera fältet på klienten. -
Ett servervalideringsskript:
Skriptnamnet ärservervalidation.<extension>
, till exempelservervalidation.jsp
Detta anropas när formuläret skickas. Den kan användas för att validera fältet på servern efter att det har skickats.
-
/libs/foundation/components/form/constraints
Formulärglobala begränsningar form-global-constraints
Den globala valideringen av formulär anges genom att en resurstyp konfigureras i startformulärkomponenten ( validationRT
). Till exempel:
apps/myProject/components/form/validation
Sedan kan du definiera:
- a
clientvalidation.jsp
- injicerat efter fältets klientvalideringsskript - och en
servervalidation.jsp
- anropas även efter att den enskilda fältservern har validerats för enPOST
.
Visa och dölja formulärkomponenter showing-and-hiding-form-components
Du kan konfigurera formuläret så att det visar eller döljer formulärkomponenter enligt värdet i andra fält i formuläret.
Att ändra synligheten för ett formulärfält är användbart när fältet bara behövs under specifika förhållanden. Till exempel frågar en fråga kunderna om de vill ha produktinformation som de får via e-post. När du väljer Ja visas ett textfält där kunden kan ange sin e-postadress.
Använd dialogrutan Redigera visa/dölj regler för att ange under vilka villkor en formulärkomponent visas eller döljs.
Använd fälten högst upp i dialogrutan för att ange följande information:
- Om du anger villkor för att dölja eller visa komponenten.
- Om något eller alla villkor måste vara true för att komponenten ska kunna visas eller döljas.
Ett eller flera villkor visas under dessa fält. Ett villkor jämför värdet för en annan formulärkomponent (i samma formulär) med ett värde. Om det faktiska värdet i fältet uppfyller villkoret utvärderas villkoret som sant. Villkoren innehåller följande information:
- Titeln på det formulärfält som testas.
- En operator.
- Ett värde jämförs med fältvärdet.
En Radio Group-komponent med titeln Receive email notifications?
* * innehåller till exempel alternativknapparna Yes
och No
. En textfältskomponent med titeln Email Address
använder följande villkor så att den är synlig om Yes
är markerad:
I JavaScript använder villkoren värdet för egenskapen Elementnamn för att referera till fält. I föregående exempel är elementnamnsegenskapen för komponenten Grupp med alternativknappar contact
. Följande kod motsvarar JavaScript-koden för det exemplet:
((contact == "Yes"))
Så här visar eller döljer du en formulärkomponent:
-
Redigera den specifika formulärkomponenten.
-
Välj Visa/dölj för att öppna dialogrutan Redigera visa/dölj regler:
-
I den första listrutan väljer du antingen Visa eller Dölj för att ange om villkoren ska avgöra om komponenten ska visas eller döljas.
-
I listrutan i slutet av den översta raden väljer du:
- all - om alla villkor måste vara true för att komponenten ska kunna visas eller döljas
- any - om bara ett eller flera villkor måste vara true för att komponenten ska kunna visas eller döljas
-
Markera en komponent, operator och ange sedan ett värde på villkorslinjen (en visas som standard).
-
Lägg till fler villkor om det behövs genom att klicka på Lägg till villkor.
Till exempel:
-
-
Klicka på OK för att spara definitionen.
-
När du har sparat definitionen visas länken Redigera regler bredvid alternativet Visa/Dölj i formulärkomponentegenskaperna. Klicka på den här länken för att öppna dialogrutan Redigera visa/dölj regler för att göra ändringar.
Klicka på OK om du vill spara alla ändringar.
note caution CAUTION Effekterna av Visa/dölj-definitioner kan ses och testas: -
i läget Förhandsgranska i författarmiljön (en sida måste läsas in igen när du först växlar till förhandsgranskning)
-
i publiceringsmiljön
-
Hantera brutna komponentreferenser handling-broken-component-references
Visa/dölj-villkor använder värdet för elementnamnsegenskapen för att referera till andra komponenter i formuläret. Konfigurationen Visa/Dölj är ogiltig när något av villkoren refererar till en komponent som har tagits bort eller har ändrat elementnamnsegenskapen. När detta inträffar måste du uppdatera villkoren manuellt, annars inträffar ett fel när formuläret läses in.
När konfigurationen Visa/Dölj är ogiltig anges konfigurationen bara som JavaScript-kod. Redigera koden för att korrigera problemen.Koden använder elementnamnsegenskapen som ursprungligen användes för att referera till komponenterna.
Utveckla skript för användning med Forms developing-scripts-for-use-with-forms
Mer information om API-elementen som kan användas för att skriva skript finns i javadocs för formulär.
Du kan använda detta för åtgärder som att anropa en tjänst innan formuläret skickas och att avbryta tjänsten om den misslyckas:
-
Definiera valideringsresurstypen
-
Inkludera ett skript för validering:
- Ring webbtjänsten i din JSP och skapa ett
com.day.cq.wcm.foundation.forms.ValidationInfo
-objekt som innehåller dina felmeddelanden. Om fel uppstår bokförs inte formulärdata.
- Ring webbtjänsten i din JSP och skapa ett