# CGI::Application code... # The main runmode, where I show the page # sub foo { my $self = shift; my $s = $self->session(); my $tmpl = $self->load_tmpl('foo'); # ... load data in the template, as long # as the missing and invalid fields, that # come from the session (see foo_update()). foo_view( $tmpl, $data, $s->param('missing'), $s->param('invalid')); return $tmpl->output(); } sub foo_update { my $self = shift; my $q = $self->query(); my $s = $self->session(); my %form = $q->Vars(); my $results = Data::FormValidator->check( \%form, $profile ); if ($results->has_invalid() or $results->has_missing()) { $s->param( missing => [ $results->missing() ] , invalid => [ $results->invalid() ] ); $self->redirect( { rm => 'foo' } ); } else { # Data are good, we proceed... $self->redirect( { rm => 'bar' } ); } } #### # This is called by foo() from the main application, just before # to display the page # sub foo_view { my $template = shift; my $date = shift; my $missing = shift; my $invalid = shift; $template->param( "missing_$_" => 1 ) for @$missing; $template->param( "invalid_$_" => 1 ) for @$invalid; # [...] return $template; } #### Bad boy! This is an error message.