--- In [EMAIL PROTECTED], Joshua Chamas <[EMAIL PROTECTED]> wrote:
> Looking at your solution, I think I would probably do 
> something more like:
> 
> <my:template href="/templates/simple.html" />
>   <my:header>Welcome back, <%= $Session->{'username'} %>!
</my:header>
>   <my:body>  
>      <!--#include file="foo.inc" -->
>   </my:body>
> </my:template>
> 
> This is a more natural use of the XMLSubs in my view, where
> inner tags get executed before outer tags.

I agree. I've changed my code to work like this.

Of course, now I've run into a new roadblock. Can $Response->Redirect
be called from within XMLSubs? I've no trouble with normal <% blocks
and accessing objects like $Session, $Response, and such, but
redirects seem to be a no go. I have a very simple page like so:

  <my:template href="/templates/simple.html">
  <my:body>
  <% $Response->Redirect('/bar.html'); print "WHEE!" %>
  Didn't redirect.
  </my:body>
  </my:template>

Accessing the page results in no data:

  $ telnet 63.121.xxx.xxx 80
  Trying 63.121.xxx.xxx...
  Connected to 63.121.xxx.xxx (63.121.xxx.xxx).
  Escape character is '^]'.
  GET /env.html HTTP/1.1
  Host: xxx.fastweb.com

  Connection closed by foreign host.

I added debug hooks to my::template and my::body-- looking at the
error log, I see they're not even being called:

  [Wed Mar 27 07:50:30 2002] [error] [asp] [6293] [debug] [env.html] -
 Session_OnEnd 0fa9687de85bb7a63efa76e3be4a4a5a
  [Wed Mar 27 07:50:30 2002] [error] [asp] [6293] [debug] [env.html] -
 Application_OnEnd
  [Wed Mar 27 07:50:30 2002] [error] [asp] [6293] [debug] [env.html] -
 Application_OnStart
  [Wed Mar 27 07:50:30 2002] [error] [asp] [6293] [debug] [env.html] -
 Session_OnStart 09bd6388e1013e29a4522c21480c1669
  [Wed Mar 27 07:50:30 2002] [error] [asp] [6293] [debug] [env.html] -
 Script_OnStart /home/httpd/hosts/fastweb/jobs2/docs/env.html
  [Wed Mar 27 07:50:30 2002] [error] [asp] [6293] [debug] [env.html] -
 Script_OnEnd /home/httpd/hosts/fastweb/jobs2/docs/env.html

At debug level -3, I can see the redirect is being called:

  [Wed Mar 27 07:53:50 2002] [error] [asp] [6333] [debug] 
[1017237230.8886;0.0017] executing 
__ASP__xxx_env_htmlx4b2b5bcadbb7f3b32a28e389dcd5b4d7
  [Wed Mar 27 07:53:50 2002] [error] [asp] [6333] [debug] 
[1017237230.8892;0.0006] redirect called - location: /bar.html;
  [Wed Mar 27 07:53:50 2002] [error] [asp] [6333] [debug] 
[1017237230.8895;0.0003] parsed session into /bar.html?session-
id=03d219b11e03c858407d8e4bce265b97
  [Wed Mar 27 07:53:50 2002] [error] [asp] [6333] [debug] 
[1017237230.8897;0.0002] new location after session query 
parsing /bar.html?session-id=03d219b11e03c858407d8e4bce265b97
  [Wed Mar 27 07:53:50 2002] [error] [asp] [6333] [debug] 
[1017237230.8900;0.0003] Script_OnEnd
  [Wed Mar 27 07:53:50 2002] [error] [asp] [6333] [debug] 
[1017237230.8902;0.0002] executing Script_OnEnd
  [Wed Mar 27 07:53:50 2002] [error] [asp] [6333] [debug] 
[1017237230.8904;0.0002] [env.html] - 
Script_OnEnd /home/httpd/hosts/fastweb/jobs2/docs/env.html
  [Wed Mar 27 07:53:50 2002] [error] [asp] [6333] [debug] 
[1017237230.8919;0.0015] ASP Done Processing - asp: Apache::ASP=HASH
(0x838d090);

but there's no output. I created a plain old ASP file like so:

  <% $Response->Redirect('/bar.html'); print "WHEE!" %>

which worked just fine. Any ideas? Any other debugging info I can
provide? I'm including my global.asa below.

use File::Basename qw(basename);

sub Session_OnStart {
    $Application->{'Session'.$Session->SessionID} = '?';
    $Response->Debug("Session_OnStart ". $Session->SessionID);
}

sub Session_OnEnd {
    my $t_session_active = time() - $Session->{onstart};
    $Application->{'Session'.$Session->SessionID} = $t_session_active;
    $Response->Debug("Session_OnEnd ". $Session->SessionID);
}

sub Application_OnStart {
    $Response->Debug("Application_OnStart");
}

sub Application_OnEnd {
    $Response->Debug("Application_OnEnd");
}

sub Script_OnStart {
    $ENV{'PATH'} = '/bin:/usr/bin';
    $Response->Debug("Script_OnStart $0");
    $Session->{Started}++;

    use vars qw(%var %db %error $input);
    %var = %db = %error = ();

    $input = $Request->Params;
}

sub Script_OnEnd {
    $Response->Debug("Script_OnEnd $0");
    $Session->{Ended}++;
}

sub Script_OnFlush {
    my $data = $Response->{BinaryRef};
    $Response->Debug("Script_OnFlush: about to flush ".length
($$data)." bytes to client");
}

$SIG{__DIE__} = \&Carp::confess;

sub my::login {
    $Response->Debug("Entered my::login");
    my $args = shift;

    if ($args->{'type'} eq 'db-only') {
        # Check the db for the username
    }
    else {
        unless ($Session->{'login'} == 1) {
            my %param;
            $param{'URL'} = $ENV{'REQUEST_URI'};
            $Response->Redirect( $Server->URL('/login/index.html', \%
param) );
        }
    }
    $Response->Debug("Exited my::login");
}

sub my::title {
    $Response->Debug("Entered my::title");
    shift;
    $var{'TITLE'} .= shift;
    $Response->Debug("Exited my::title");
}

sub my::header {
    $Response->Debug("Entered my::header");
    shift;
    $var{'HEADER'} .= shift;
    $Response->Debug("Exited my::header");
}

sub my::function {
    $Response->Debug("Entered my::function");
    shift;

    my $style;

    if ($var{'FUNCTION_COUNT'} == 0) {
      $style = 'border:1px solid #58B; background: #8BE';
    }
    elsif ($var{'FUNCTION_COUNT'} == 1) {
      $style = 'border:1px solid #69C; background: #9CF';
    }
    else {
      $style = 'border:1px solid #CCC; background: #FFF';
    }

    $var{'FUNCTIONS'} .= <<EOF;
  <tr>
  <td align="center" valign="center" height="150" style="$style">
EOF

    $var{'FUNCTIONS'} .= shift;

    $var{'FUNCTIONS'} .= <<EOF;
  </td>
  </tr>
  <tr>
  <td><img src="/spacer.gif" height="1" width="1"></td>
  </tr>
EOF

    $var{'FUNCTION_COUNT'}++;
    $Response->Debug("Exited my::function");
}

sub my::footer {
    $Response->Debug("Entered my::footer");
    shift;
    $var{'FOOTER'} .= shift;
    $Response->Debug("Exited my::footer");
}

sub my::body {
    $Response->Debug("Entered my::body");
    my $args = shift;
    $var{'BODY'} = shift;
    $Response->Debug("Exited my::body");
}

sub my::var {
    $Response->Debug("Entered my::var");
    my ($args, $data) = @_;
    $data =~ s/^\n//;
    $data =~ s/\n$//;
    $var{$args->{'name'}} = $data;
    $Response->Debug("Exited my::var");
}

sub my::template {
    $Response->Debug("Entered my::template");
    my ($args, $data) = @_;
    $var{'TITLE'} ||= $var{'HEADER'};
    $var{'TEMPLATE'} = $Server->MapPath($args->{'href'});
    $Response->Include($var{'TEMPLATE'});
    $Response->Debug("Exited my::template");
}





---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to