Einzelnen Beitrag anzeigen

Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#1

WebActionItems - oder kurz vor dem Durchdrehen

  Alt 22. Aug 2016, 19:55
Hi zusammen

Im Anhang findet ihr diverse Jpegs, die meinen Aktionseditor und einigee andere meiner definitionen im Bezzug auf Pathinfo zeigen.
Stand der Dinge ist:
Bei Programmstart ist der Wert von Request.Pathinfo (per Vorgabe von Delphi) "/".
Aufgerufen wird, nach dem Haltepunkt im Event "OnBeforeDispatch" das DefaultWebActionItem.
Delphi-Quellcode:
procedure TWebModule1.WebModuleBeforeDispatch(Sender: TObject;
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
  var PathInformation: String;
begin
  PathInformation := Request.PathInfo;
  if Containstext(PathInformation, 'Images') then
  begin
    Self.ActionByName('WACImageItem').PathInfo := Request.PathInfo;
  end;
end;
In WebModuleBeforeDispatch prüfe ich, ob in Pathinfo der String 'Images' enthalten ist und weise dem Property WACImageItem.PathInfo den angeforderten Pfad der Bilddatei zu. Ich hatte erst für jedes Bild ein eigenes WebActionItem zuweisen wollen. Das ergäbe mindestens 12 Items bei 12 Bildern pro Seite, die alle bis auf den eigentlichen Dateinamen übereinstimmen - Grund genug, um dies in einer einzigen Action zu erledigen. Bis auf die Tatsache, dass die Pfade nicht gefunden werden, scheint dies zu klappen.
Die Pfade werden nicht gefunden, weil Delphi meinen HTML-Links (Images/.../..) regelmässig den String '/html/' voranstellt - und da liegen die angeforderten Bilder nicht.
Aber noch sind wir eigentlich erst bei der Start- oder Indexseite. Deren WebActionItem ruft das Homeitem auf:

Delphi-Quellcode:
procedure TWebModule1.WebModule1DefaultHandlerAction(Sender: TObject;
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
if Request.PathInfo = '/then
  WebModule1WebActHomeAction(Self,Request,Response,Handled);
end;
und
Delphi-Quellcode:
procedure TWebModule1.WebModule1WebActHomeAction(Sender: TObject; // 1. Act
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin

  Response.Content := PageProducerHome.Content;
  Response.SendResponse;
end;
Nachdem der einige src-Tags und Delphi-Tags beantwortet hat(Images/Background bzw. Replaccetags) wird die Seite anstandslos korrekt angezeigt.
Auf dieser habe ich ein HTML-Menue, über das andere Seiten meines Webprojektes aufgerufen werden sollen. Das sind unter anderem:
Delphi-Quellcode:
   <li><a href="#">Gotthardgiganten</a></li>
   <li><a href="#">Französischer Dampf am Gotthard</a></li>
   <li><a href="html/AufromantischerSpur1.html">DVZO - Auf romantischer Spur1</a></li>
   <li><a href="html/BischofzellerRosenwochen.html">Mit Dampf an die Bischofszeller Rosenwochen</a></li>
   <li><a href="html/Das Juwel vom Waldenburgertal.html">Das Juwel vom Waldenburgertal</a></li>
   <li><a href="html/BahnhofsfestWattwil.html">Bahnhofsfest Wattwil</a></li>
Rufe ich BischofzellerRosenwochen auf, klappt alles, wie es soll, ausser den oben beschriebenen nicht gefundenen Bildpfaden.
Rufe ich aber das Juwel vom Waldenburgertal auf, hat in BeforeDispatch Pathinfo den Wert '/html/Das Juwel vom Waldenburgertal.html', entsprechend dem Wert des WebactionItem-Objektes.
Während des Durchsteppens landet der Cursor schliesslich in TIdCustomHTTPServer.DoExecute, wo zum Schluss die Verbindung gekappt wird. Der Browser zeigt nun eine leere Seite, die Adressezeile ist korrekt, und wenn ich mir den Seitenquelltext im Browser ansehen will, erhalte ich eine leere Seite.
Mit andern Worten: Das WebactionItem.OnAction wird gar nicht aufgerufen (da befindet sich ein Haltepunkt).
PathInfo hatte auch schon mal den Wert/html/html/Das Juwel vom Waldenburgertal.html . ebenso am Schluss die Adresszeile des Browsers - dieser hatte dafür aber weder Inhalt noch Seitenquelltext...

Gruss
Delbor
Miniaturansicht angehängter Grafiken
webactionitems.jpg   webactionwaldenburg.jpg   pathinfo-background.jpg   waldenbuger-juwel-menue.jpg  
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat