package FormSwitch; use base main; use strict; use warnings; sub browse{ my $self = shift; $self->{STASH}{answer} = 'display:none'; $self->{STASH}{descr} = $self->eav('descr'); } sub control{ my $self = shift; if( $self->param('sw') ){ $self->{STASH}{form} = 'display:none'; $self->{STASH}{in} = $self->trim($self->param('in')) || ''; $self->{STASH}{in} = $self->ents($self->{STASH}{in}); } elsif( $self->param('src') ){ $self->header('Content-Type' => 'text/plain; charset=utf-8'); $self->{CONTENT} = do{ my $pkg = __PACKAGE__; local @ARGV = $INC{"$pkg.pm"}; local $/ = undef; <>; }; } else{ return $self->errmsg('Unbekannter Parameter', $self->{URL}); } } q(Bis zu dieser Zeile ist Perl, im nächsten Abschnitt ist das HTML-Template); __DATA__

%descr%

Ihre Aktion:

Antwortseite, Formularauswertung

%if_in%

Ihre Eingabe: %in%

%else%

Sie hatten nichts eingegeben.

%endif%

Zurück zum Formular

Wenn Sie möchten, können Sie sich den Perl-Code hier anschauen, zurück gehts dann mit dem Backbutton.

Erläuterungen zu dieser Framework-Kompaktklasse

Schauen Sie in den Perl-Code, sehen Sie das Template unterhalb des __DATA__ Token. Im darüberliegenden Text-Bereich ist der Perl-Code notiert, wobei es sich um zwei Methoden der Framework-Instanz handelt. Diese kleine Demo-Anwendung hat zwei Zustände/View, einmal das Formular und zum Anderen eine Antwortseite mit der Formularauswertung. Von daher werden auch genau zwei Templates benötigt.

Wie diese DEMO zeigt, sind beide Templates in einer Datei bzw. Textabschnitt notiert. Der Zustandsübergang ist über Parameter im Request gesteuert und somit wird die Framework-Methode control{} aufgerufen. Schlüsselparameter werden ausgewertet und damit die Ansicht gesteuert. Über Platzhalter in der style= Angabe wird die Sichtbarkeit des dem Zustand/View zugeordneten HTML-Abschnittes ein, bzw. ausgeschaltet. Ich nenne den Aufbau solcher MVC-Klassen Kompaktklasse, diese Bezeichnung erklärt sich von selbst (andere Klassen nutzen einen anderen Speicherort für das Template).

AJAX: Unobtrusive JavaScript

style- bzw. class-Attribute von HTML-Elementen lassen sich anstelle von serverseitig mitgegebenen Platzhaltern natürlich auch per JavaScript ändern. Auf diese Art und Weise lassen sich solche Anwendungen leicht per AJAX erweitern, ohne dass zusätzliche Template-Dateien notwendig sind. Gleichermaßen erhöht sich für den Benutzer der Komfort, weil das was clientseitig erforderlich ist, auch clientseitig erfolgt.