in reply to CGI::Application Run Modes

The problem you are facing is not the result of the behaviour of CGI::Application, but rather that of the "sticky" behaviour of CGI.pm when used for hidden form field generation.

From the CGI.pm POD ...

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: $query->param('hidden_name','new','values','here');

As such, you will need to force the change in the runmode hidden form field value via something like $q->param('runmode', 'mode3'), for example ...

sub bar { my $self = shift ; my $q = $self->query() ; my $output = '' ; my $first_number = $q->param( 'first_number' ) ; $q->param( 'runmode', 'mode3' ); $output .= $q->start_html( "Bar" ) ; $output .= $q->h2( 'I\'m webapp run mode number two.' ) ; $output .= $q->h2( 'You click me and I\'ll click you!' ) ; $output .= $q->start_form ; $output .= $q->h3( 'Gimme another number!' ) ; $output .= $q->textfield( -name => 'second_number' ); $output .= $q->hidden( -name => 'first_number', -value => $first_number ); $output .= $q->hidden( -name => 'runmode', -value => 'mode3' ); $output .= $q->submit(); $output .= $q->end_form(); $output .= $q->end_html(); return $output; }

Alternatively, you could make use of the templating features offered by HTML::Template which is integrated with this framework - I would advocate this approach as the combination of the framework provided by CGI::Application and the flexibility offered by page template allows for great ease in rapid prototyping. If your preferred templating system is not HTML::Template however, you can make use of an alternate framework such as Template Toolkit in a fashion very similar to that I have described here.

 

Update - Added code example to demonstrate the inclusion of $q->param('runmode', 'mode3') in the bar subroutine.

 

Replies are listed 'Best First'.
Re: Re: CGI::Application Run Modes
by dda (Friar) on Jun 27, 2002 at 08:27 UTC
    rob_au, I tried the first approach and added "q->param('runmode', 'mode3');" to the "bar" sub right before "return" statement. It did not help. Where I'm wrong?

    --dda

Re: Re: CGI::Application Run Modes
by dda (Friar) on Jun 27, 2002 at 11:30 UTC
    Thank you! I placed it in a wrong order... :)

    --dda