Schrift
[thread]11803[/thread]

CGI::Application und Parameter



<< >> 5 Einträge, 1 Seite
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;
pktm
 2008-05-14 21:13
#109692 #109692
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Wenn deine 2. Seite showform ist, dann liegt das daran, dass du $output .= $q->hidden(-name => 'rm', -value => 'mode2'); schreibst.

Warum benutzt du nicht sowas wie HTML::Template?

Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )
foobar123
 2008-05-14 21:22
#109694 #109694
User since
2008-05-14
3 Artikel
BenutzerIn
[default_avatar]
Danke für die Antwort, aber showform ist die 1. Seite. showlist ist die 2. Seite und da steht ebenfalls 'mode2' im hidden-Feld. Das verstehe ich nicht.

Ich spiele erstmal damit herum. Mehr nicht. Templates kommen später.

foobar123
pktm
 2008-05-14 21:38
#109696 #109696
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Ah, hier die Lösung:
Quote
Note, that just like all the other form elements, the value of a hidden field is "sticky". If you want to replace a hidden field with some other values after the script has been called once you'll have to do it manually:

param('hidden_name','new','values','here');


Du belegst den Wert des hidden-fields nicht mit -value, das greift auf vorhandene Wert (oder den -default) zurück, um das Feld zu füllen.

Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )
foobar123
 2008-05-14 21:53
#109697 #109697
User since
2008-05-14
3 Artikel
BenutzerIn
[default_avatar]
Danke!
<< >> 5 Einträge, 1 Seite



View all threads created 2008-05-14 21:11.