<form:listener> : Frage zu "control"

Hier finden sich Fragen und Ergänzung zur Dokumentation. // All questions and discussions about the documentation.
Antworten
Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

<form:listener> : Frage zu "control"

Beitrag von ma2604121 » 16.09.2011, 23:40:51

Sehe ich es richtig, dass im <form:listener> nicht die Möglichkeit besteht, mehrere Felder anzugeben, so wie es im Validator möglich ist?

Also:

Code: Alles auswählen

<form:listener control="Feld1|Feld2|Feld3" validator="NumberValidator"> 
ist nicht möglich.

Aber im Validator geht:

Code: Alles auswählen

<form:addvalidator class="NumberValidator" control="Feld1|Feld2|Feld3" button="Save" type="special"/> 

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: <form:listener> : Frage zu "control"

Beitrag von dr.e. » 17.09.2011, 09:23:00

Hi,

das siehst du richtig. Für diese Anwendung gibt es den <form:error/>- und <form:success/>-Tag. Diese Einschränkung besteht daher, dass ein Listener auch auf einen speziellen Validator "hören" kann und du bei der Angabe von mehreren Feldern dies nicht mehr gewährleisten kannst.

Mich würde aber dein Anwendungsfall intersessieren. Vielleicht gibt es doch eine elegante Möglichkeit oder eine kleine Änderung, die dir helfen kann.
Viele Grüße,
Christian

Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Re: <form:listener> : Frage zu "control"

Beitrag von ma2604121 » 17.09.2011, 09:54:45

Mein "spezieller" Anwendungsfall ist ein Feld, das eine Zeit enthalten soll.

Normalerweise könnte ich einfach ein Text-Feld nehmen und gut ist. Aber ich habe festgestellt, dass es für Anwender einfacher ist, wenn ich drei einzelne Textfelder ausgebe und diese mittels value die Werte hh / mm / ss zuweise. Dann ist eigentlich jedem sofort klar, wie die Felder zu befüllen sind. Bei einem einzigen Textfeld gestaltet sich das schwieriger, selbst wenn ich dort mittels value="hh:mm:ss" als Vorgabe setze.

Somit habe ich also drei Textfelder, die allesamt mit einer Zahl befüllt sein sollen, das wiederum wird mittels Validator geprüft.

Jetzt wäre es natürlich schön, wenn bei fehlerhafter Befüllung ein Listener für alle drei Felder zuständig wäre - quasi so, wie es auch der Validator macht. Letztendlich gehören die drei Felder schließlich zusammen.

Derzeit muss ich es also wie folgt lösen:

Code: Alles auswählen

        <form:listener control="Hour" validator="NumberValidator">
            Bitte überprüfe die Eingabe im Feld "hh". Dort muss eine Zahl eingetragen sein!
        </form:listener>
        <form:listener control="Minute" validator="NumberValidator">
            Bitte überprüfe die Eingabe im Feld "mm". Dort muss eine Zahl eingetragen sein!
        </form:listener>
        <form:listener control="Second" validator="NumberValidator">
            Bitte überprüfe die Eingabe im Feld "ss". Dort muss eine Zahl eingetragen sein!
        </form:listener>
 
Schöner wäre es natürlich in einem Abwasch:

Code: Alles auswählen

        <form:listener control="Hour|Minute|Second" validator="NumberValidator">
            Bitte überprüfe Deine Eingabe der Zeit. Sie muss aus Ziffern bestehen!
        </form:listener> 

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: <form:listener> : Frage zu "control"

Beitrag von dr.e. » 17.09.2011, 10:30:24

Hi,

danke für den Input. Ich sehe zwei Möglichkeiten für eine "einfachere" Lösung:
  • Eigenes Control für "Zeit" schreiben oder das <form:time /> des APF nutzen.
  • Speziellen Listener schreiben, der exakt diesen Anwendungsfall abdeckt (mit der Einschränkung, dass er nicht auf einen speziellen Validator einschränkbar ist).
Ich halte Möglichkeit a) für die einfachere Möglichkeit, da du damit mehrere Felder als ein fachliches Control repräsentierst und damit erst garnicht die Notwendigkeit besteht, mehrere Listener zu definieren. Schau dir mal http://adventure-php-framework.org/Seit ... it-Control. Es gibt zwar im APF noch keinen passenden Validator, aber das ist schnell nachgeholt.
Viele Grüße,
Christian

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste