|
<< Click to Display Table of Contents >> Navigation: Forum > First Page from URL |
04-21-2018, 01:55 PM:
Hi I have created a new Intraweb (standalone) app with two forms (blueform and greenform) and have given them URL aliases in the OnConfig handler of the server controller using:
void __fastcall TIWServerController::IWServerControllerBaseConfig(TObject *Sender)
{
TGreenForm::SetURL ("/", "Green.html") ;
TBlueForm::SetURL ("/", "Blue.html") ;
}
The green form is set as the main form
If I try to start a session from a browser with the URL: http://127.0.0.1:8888/Blue.html I don't get the blue form, I get the green form. How can I fix this please?
Once the session has been started, the URL does work
I have Intraweb 14.2.7 Ultimate edition, and am using C++Builder 10.2 update 3
Thanks
Ian
04-21-2018, 07:30 PM:
I believe you would use ContentHandlers for that, or use the ServerController.OnGetMainForm event to detect parameters.
ContentHandlers would seem to be the best fit.
https://doc.atozed.com/en/iw14/develop/c...-handlers/
04-23-2018, 02:00 AM:
(04-21-2018, 07:30 PM)DanielFields Wrote: [ -> ]I believe you would use ContentHandlers for that, or use the ServerController.OnGetMainForm event to detect parameters.
ContentHandlers would seem to be the best fit.
https://doc.atozed.com/en/iw14/develop/c...-handlers/
In addition to the doc page Daniel referenced, there are samples on Github at:
https://github.com/Atozed/IntraWeb
There is apparently a C++ example of that in the directory "...trunk\XIV\C++\ContentHandlers", though I didn't try it. The Delphi example is under the Delphi directory.
Dan
04-23-2018, 09:33 AM:
Thank you both for pointing me at the ContentHandlers example.
Unfortunately, it suffers from exactly the same problem.
The example defines three URLs /blueform.html /redform.html and /mydoc.html (which redirects to an external page) it also has am additional main form.
Starting the session using the URL http://127.0.0.1:8000/bluform.html in a browser does not give the blueform page, but gives the mainform instead. once the session has started the URL does indeed give the blueform.
Is this only a problem with C++ only?
04-24-2018, 12:16 AM:
(04-23-2018, 09:33 AM)AllBars Wrote: [ -> ]Thank you both for pointing me at the ContentHandlers example.
Unfortunately, it suffers from exactly the same problem.
The example defines three URLs /blueform.html /redform.html and /mydoc.html (which redirects to an external page) it also has am additional main form.
Starting the session using the URL http://127.0.0.1:8000/bluform.html in a browser does not give the blueform page, but gives the mainform instead. once the session has started the URL does indeed give the blueform.
Is this only a problem with C++ only?
You are correct, that example does require the main form to be executed in order to start the session. I haven't done this specifically, as you are looking for, so I'm not going to be much more help. But that doesn't keep me from making suggestions. <g>
You might look at CustomContenHandler. I've used those before but as a different mission (serving up XML single message service). I'm fairly sure that has some option to serve up a form, and maintain the session. I just haven't had the need to look into it.
Another potential option, if you don't mind another "Splash style" form coming up initially is to allow a "Main" form to come up, but have that form launch your target. I've done that by launching in an async timer event off the main form. In my case I intentionally wanted a flash message to appear, but if you can make it look like you want that splash then it works great.
But, again, I'm pretty sure there is a way to do exactly what you're looking for... I just don't know the details. I'm pretty sure it will involve a CustomContentHandler.
Dan
04-24-2018, 04:42 AM:
CustomContentHandlers will work. I keep forgetting that there are two options in that area. The other option is to pass the form as a parameter. You could then use the OnGetMainForm event in the server controller.
Your URL would be a little different: http://mydomain.com:8888/$/start/?blue.html. The server would see "blue" as WebApplication.RunParams[0]. You would use that in your logic for the event.
04-24-2018, 04:31 PM:
(04-24-2018, 04:42 AM)DanielFields Wrote: [ -> ]CustomContentHandlers will work. I keep forgetting that there are two options in that area. The other option is to pass the form as a parameter. You could then use the OnGetMainForm event in the server controller.
Your URL would be a little different: http://mydomain.com:8888/$/start/?blue.html. The server would see "blue" as WebApplication.RunParams[0]. You would use that in your logic for the event.
That will work ok. thank you for the tip :-)
(04-24-2018, 12:16 AM)DanBarclay Wrote: [ -> ] (04-23-2018, 09:33 AM)AllBars Wrote: [ -> ]Thank you both for pointing me at the ContentHandlers example.
Unfortunately, it suffers from exactly the same problem.
The example defines three URLs /blueform.html /redform.html and /mydoc.html (which redirects to an external page) it also has am additional main form.
Starting the session using the URL http://127.0.0.1:8000/bluform.html in a browser does not give the blueform page, but gives the mainform instead. once the session has started the URL does indeed give the blueform.
Is this only a problem with C++ only?
You are correct, that example does require the main form to be executed in order to start the session. I haven't done this specifically, as you are looking for, so I'm not going to be much more help. But that doesn't keep me from making suggestions. <g>
You might look at CustomContenHandler. I've used those before but as a different mission (serving up XML single message service). I'm fairly sure that has some option to serve up a form, and maintain the session. I just haven't had the need to look into it.
Another potential option, if you don't mind another "Splash style" form coming up initially is to allow a "Main" form to come up, but have that form launch your target. I've done that by launching in an async timer event off the main form. In my case I intentionally wanted a flash message to appear, but if you can make it look like you want that splash then it works great.
But, again, I'm pretty sure there is a way to do exactly what you're looking for... I just don't know the details. I'm pretty sure it will involve a CustomContentHandler.
Dan
That might have worked, but Dan Fields solution is cleaner. Thank you for the suggestions.
This feels a lot like a bug to me though. The same URL gives different results depending on if the session has already been started or not.
Ian