Thread CGI::Application und Parameter (4 answers)
Opened by foobar123 at 2008-05-14 21:11

foobar123
 2008-05-14 21:11
#109691 #109691
User since
2008-05-14
3 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich schaue mir gerade CGI::Application an und habe entsprechend der Doku ein kleines Beispielscript "zusammengeklickt". Dabei komme ich allerdings mit einem Detail nicht weiter. Das Script erzeugt beim Start ein Formular mit einem "hidden"-Feld. Über den Wert in diesem Feld wird zur 2. Seite weitergeschaltet. (wenn man auf Submit klickt)

Auf der 2. Seite gibt es ein neues Formular, welches ebenfalls ein "hidden"-Feld mit demselben Namen wie auf Page 1 enthält. Dieses Feld wird im Coding mit dem Wert 'mode1' belegt. Beim Aufruf im Browser wird hier allerdings 'mode2' angezeigt (so wie auf der Startseite).

Ich habe etwas herumhgespielt. Wenn man in der Methode showlist explizit den Parameter 'rm' umsetzt, funktioniert es. Aber ich verstehe nicht, warum das hidden-Feld auf der 2. Seite den Wert 'mode2' enthält? Kann mich bitte jemand erleuchten? Ist das ein normales Verhalten von http/html oder ein Feature von CGI::Application?

Hier das Script:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package Widget;
use base 'CGI::Application';
use strict;

sub setup {
  my $self = shift;
  $self->mode_param( 'rm' );
  $self->start_mode('mode1');
  $self->run_modes(
    'mode1' => 'showform',
    'mode2' => 'showlist',
  );
}

sub showform {
  my $self = shift;

  my $q = $self->query();
  my $output = '';
  $output .= $q->start_html(-title => 'First');
  $output .= $q->start_form(-name => "first");
  $output .= $q->textfield(-name => 'widgetcode');
  $output .= $q->hidden(-name => 'rm', -value => 'mode2');
  $output .= $q->submit();
  $output .= $q->end_form();
  $output .= $q->end_html();
  return $output;
}

sub showlist {
  my $self = shift;

  my $q = $self->query();
  my $output = '';
  $output .= $q->start_html(-title => 'Second');
  $output .= $q->start_form(-name => "second");
  $output .= $q->hidden(-name => 'rm', -value => 'mode1');
  $output .= $q->submit();
  $output .= $q->end_form();
  $output .= $q->end_html();
  return $output;
}

1;

View full thread CGI::Application und Parameter