I solved the problem. I was not giving the Content-Type header in the
display_error_message subroutine and that was giving me a server error

As Kieran mentioned, I did try using exit but because of the error
above, was misled into thinking that 'exit' was the cause of the error.
Now things seem OK.

Thanks for all your help.

Sharad
--- [EMAIL PROTECTED] wrote:

> 
> > 
> > From: Kasturirangan Rangaswamy <[EMAIL PROTECTED]>
> > Date: 27/11/2004 16:54:19
> > To: [EMAIL PROTECTED]
> > Subject: CGI::Application design question
> > 
> > Hi,
> > 
> >    This is a CGI::Application design question. It concerns side-
> >    stepping normal run modes at any point within the application
> >    to display an error screen.
> > 
> >    I have created a 'base' module whose job it is to
> > 
> >    a. Setup a connection to a database
> >    b. Initialize session
> >    c. Bring the user to an index screen.
> > 
> >    I have put (a) and (b) in the cgiapp_init method as I intend to 
> >    extend this class in the future.
> > 
> >    My code inside cgiapp_init looks as below
> > 
> >   
> >
> ---------------------------------------------------------------------
>  
> > sub cgiapp_init {
> > 
> >     my $self = shift;
> > 
> >     #Create a database connection
> >     $self->initialize_database;
> > 
> >     #Create a new session
> >     $self->initialize_session;
> > 
> >    }
> >   
> >
> ---------------------------------------------------------------------
> > 
> >   'initialize_database' is a subroutine which is as follows
> > 
> >   
> >
> ---------------------------------------------------------------------
>  
> > sub initialize_database {
> > 
> >     open(DB_CONNECTION_FILE, '/export/home/r/rangask/software/cgi- 
> 
> >       bin/SoftwareDistribution/common/daase_connection_params.txt')
> ||
> >         display_error_page("blah");
> >     my ($hostname, $database, $user, $password) =
> > split(/:/,<DB_CONNECTION_FILE>);
> > 
> >    }
> >   
> >
> ---------------------------------------------------------------------
> > 
> >   I wish to display an error screen if something goes wrong with
> > opening of the file. Thats done by 'display_error_page' subroutine.
> > 
> >   
> >
> ---------------------------------------------------------------------
>  
> > sub display_error_page {
> > 
> >     #my $self = shift;
> >     print "in here";
> >     my $msg_string = shift;
> > 
> >     #Load the error template page
> >     # my $tmpl_error_page = $self->load_tmpl('error_page.tmpl',
> >     #                                        die_on_bad_params =>
> 0,
> >     #                                        cache => 1
> >     #                                      );
> > 
> >     my $tmpl_error_page = HTML::Template->new(filename =>
> > '/export/home/r/rangask/software/html/error_page.tmpl');
> >     $tmpl_error_page->param(error_message => $msg_string);
> > 
> >     $tmpl_error_page->output();
> >     print "after the template";
> > 
> >    }
> >   
> >
> ---------------------------------------------------------------------
> > 
> >    Finally, my setup method is as follows
> > 
> >   
> >
> ---------------------------------------------------------------------
>  
> > sub setup {
> > 
> >      my $self = shift;
> > 
> >      #Note that no tmpl_path is being used here. We will give that
> > while calling this module
> > 
> >      $self->start_mode('display_entry_screen');
> >      $self->run_modes(
> >               'display_entry_screen' => 'display_entry_screen',
> >                           'AUTOLOAD' =>
> \&deal_with_undefined_run_mode
> >      );
> >    }
> >   
> >
> ---------------------------------------------------------------------
> > 
> >    As you can see, I am calling the 'display_error_page' subroutine
> > from within the 'initialize_database' subroutine. So before I
> display
> >    any page, if the file-open fails, I want to display an error
> page. 
> > 
> >    PROBLEM: I get to the error subroutine (I should because the DB
> > parameter filename given is wrong and I tested this fact by giving
> some
> > 
> >    print statements and observing the command line output) but am
> > automatically redirected to the main page through the 
> >    'display_entry_screen' subroutine (details of that sub not shown
> > here)
> > 
> >    How do I make it stay on the error page?
> > 
> >    I could possibly define the 'display_error_page' as a run mode
> and
> > use the cgiapp_prerun and the mode_prerun methods to go to it
> >    but this 'display_error_page' is a common method I want to call
> from
> > my 'child' modules and I feel defining it as an additional run mode
> >    will prove restrictive. 
> > 
> >    I guess my question could also be rephrased as:
> > 
> >    Is there a way of breaking the run-mode path of a
> CGI::Application
> > to throw an error page?
> > 
> >    Any help is appreciated. Thanks for your patience in reading
> this
> > long post.
> > 
> > Sharad
> > 
> > 
> >             
> > __________________________________ 
> > Do you Yahoo!? 
> > Read only the mail you want - Yahoo! Mail SpamGuard. 
> > http://promotions.yahoo.com/new_mail 
> > 
> > -- 
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> > <http://learn.perl.org/> <http://learn.perl.org/first-response>
> > 
> > 
> >
>      Hello Sharad and others,
>                           I am not sure about your question except
> that I think it requires the use of a command like exit(0);.  This
> always exits HTML pages and waits for a response to checkboxes etc.,
> so I assume it would do the same thing for an error page,
>                       Kieran.
>           
> 
> This message was sent through MyMail http://www.mymail.com.au
> 
> 
> 


__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to