dev@jsftemplating.java.net

Re: JSFTemplating: How to get the page url?

From: Ken Paulsen <Ken.Paulsen_at_Sun.COM>
Date: Thu, 17 Jan 2008 12:37:38 -0800

I have definitely made that mistake! I even made it when I first
(didn't) saved the i.inc file when I was testing your use case. :)

I'm glad it's working well now.

Ken

Karam Singh Badesha wrote:
> I had made changes to this one file but somehow those changes never
> got saved to the file. So when I looked carefully at the code I
> realized that my changes are not there and hence this problem. I have
> netbeans running in my vnc session and then regular sunray session at
> work. So I am don't know if forgot to save the file in one session and
> started working on the other etc. Will try to be more careful next
> time :)
>
> -Karam
>
> Ken Paulsen wrote:
>>
>> File in the wrong directory? Other? Let us know b/c we all make
>> these mistakes. :)
>>
>> Ken
>>
>> Karam Singh Badesha wrote:
>>> I found the problem and it is unrelated to the code or how I was
>>> doing include. Thanks for all the help.
>>>
>>> -Karam
>>>
>>> Ken Paulsen wrote:
>>>>
>>>> Can you show how you are including resource.inc? Do you have the
>>>> jsftemplating DEBUG flag on or off?
>>>>
>>>> You shouldn't have to restart the server to see any changes
>>>> (assuming you have the DEBUG flag on). I haven't restarted my
>>>> server since your first email and I have changed the page several
>>>> times to perform tests to ensure things are working properly.
>>>>
>>>> I just added this to the top of my test file:
>>>>
>>>> #include i.inc
>>>>
>>>> I moved the content of the redirect to that file and it behaved
>>>> correct (w/o any restart / redeploy). I made changes to the i.inc
>>>> file and they also appeared correctly.
>>>>
>>>> One thought... perhaps you have a space before the "#". The
>>>> "#include" is required to be at the beginning of the line to be
>>>> processed. Otherwise, it will be interpreted as a comment.
>>>>
>>>> Ken
>>>>
>>>> Karam Singh Badesha wrote:
>>>>> Currently my initPage code is in a "resource.inc" file that I
>>>>> include in all my pages. I made some other changes to this file
>>>>> and it seems like they are not taking effect (even though I
>>>>> restarted the server and redeployed the war file). So then I
>>>>> created a new jsf file with just exact code from resource.inc file
>>>>> and it works fine. So I think the problem is really with cache or
>>>>> resource.inc file not getting the updates that I have made. Any
>>>>> suggestions why this is happening?
>>>>>
>>>>> thanks
>>>>> Karam
>>>>>
>>>>> Ken Paulsen wrote:
>>>>>>
>>>>>> Hi Karam,
>>>>>>
>>>>>> I did the test as you described below and it worked fine.
>>>>>> However, what I *didn't* do was enable security... so here's what
>>>>>> may be happening. You are visiting a page that is protected by a
>>>>>> security constraint in your web application and it is redirecting
>>>>>> to your login.jsf page. I don't think the FacesServlet is even
>>>>>> being invoked for the page you attempted to visit, let alone the
>>>>>> initPage(). You can try to execute a "println()" in the
>>>>>> initPage to see if you can get it to execute to test this.
>>>>>>
>>>>>> How to get around this problem. Disable security (I don't think
>>>>>> that's the way you want to go). Find a way to get the original
>>>>>> request URI information from w/i the login.jsf page (not sure if
>>>>>> this is available or not... although I think it is). If the page
>>>>>> IS executing before the redirect, try storing it in session
>>>>>> instead of as a QUERY_STRING parameter (I don't think this is an
>>>>>> option, though, b/c I don't think the FacesServlet let alone the
>>>>>> initPage is executing). Last, try emailing the GF dev alias
>>>>>> (dev_at_glassfish.dev.java.net) and see if anyone (like Jan Luehe)
>>>>>> has a better suggestion.
>>>>>>
>>>>>> Ken
>>>>>>
>>>>>> Karam Singh wrote:
>>>>>>> Ken,
>>>>>>> I have the following code in initPage
>>>>>>>
>>>>>>> <!initPage
>>>>>>> redirect(page="login.jsf?dest=#{request.requestURL}");
>>>>>>> />
>>>>>>>
>>>>>>> Strangely it gets redirected to login.jsf without the "dest=<url
>>>>>>> of the page where its coming from>". Am I doing something wrong
>>>>>>> in the above code?
>>>>>>>
>>>>>>> thanks
>>>>>>> Karam
>>>>>>>
>>>>>>> Ken Paulsen wrote:
>>>>>>>>
>>>>>>>> Hi Karam,
>>>>>>>>
>>>>>>>> I added the following to the top of the test page that I wrote
>>>>>>>> below:
>>>>>>>>
>>>>>>>> <!initPage
>>>>>>>> println("hi! '#{request.requestURL}'");
>>>>>>>> />
>>>>>>>>
>>>>>>>> println() writes a log message to the server.log... I checked
>>>>>>>> and the correct value for the requestURL was written in the log:
>>>>>>>>
>>>>>>>> [#|2008-01-16T23:52:46.067+0000|INFO|sun-appserver9.1|javax.enterprise.system.stream.out|_ThreadID=19;_ThreadName=httpSSLWorkerThread-8080-3;|
>>>>>>>>
>>>>>>>> hi! 'http://localhost:8080/demo/j.jsf'|#]
>>>>>>>>
>>>>>>>> Make sure your initPage event is at the top of your file.
>>>>>>>>
>>>>>>>> I hope this helps,
>>>>>>>>
>>>>>>>> Ken
>>>>>>>>
>>>>>>>> Karam Singh Badesha wrote:
>>>>>>>>> Ken,
>>>>>>>>> If I try to use #{request.requestURL} inside a initPage event,
>>>>>>>>> it doesn't work. Is that how its supposed to work?
>>>>>>>>>
>>>>>>>>> thanks
>>>>>>>>> Karam
>>>>>>>>>
>>>>>>>>> Ken Paulsen wrote:
>>>>>>>>>>
>>>>>>>>>> Hi Karam,
>>>>>>>>>>
>>>>>>>>>> You can get this information from the request object. If you
>>>>>>>>>> want to do this from w/i a JSFT .jsf page, you can do this
>>>>>>>>>> via an EL expression. If you cut/paste the following into a
>>>>>>>>>> .jsf page in your application you can see what these do:
>>>>>>>>>>
>>>>>>>>>> "ContextPath: #{request.contextPath}<br />
>>>>>>>>>> "QueryString: #{request.queryString}<br />
>>>>>>>>>> "RequestURI: #{request.requestURI}<br />
>>>>>>>>>> "RequestURL: #{request.requestURL}<br />
>>>>>>>>>> "ServletPath: #{request.servletPath}<br />
>>>>>>>>>>
>>>>>>>>>> For JSF w/ a *.jsf servlet mapping, the last one will give
>>>>>>>>>> you want you want.
>>>>>>>>>>
>>>>>>>>>> If you want to do this via Java, then you can get some of
>>>>>>>>>> this information from the ExternalContext. The rest can be
>>>>>>>>>> obtained directly from the request object (although you'll
>>>>>>>>>> have to cast to ServletRequest or HttpServletRequest...
>>>>>>>>>> meaning your code won't work in a Portlet environment). You
>>>>>>>>>> can get the ExternalContext & request object by doing:
>>>>>>>>>>
>>>>>>>>>> FacesContext.getCurrentInstance().getExternalContext()
>>>>>>>>>>
>>>>>>>>>> externalContext.getRequest()
>>>>>>>>>>
>>>>>>>>>> I hope this helps!
>>>>>>>>>>
>>>>>>>>>> Ken
>>>>>>>>>>
>>>>>>>>>> Karam Singh Badesha wrote:
>>>>>>>>>>> Hi,
>>>>>>>>>>> e.g. One of the page in my app is http://host/CADRe/test.jsf
>>>>>>>>>>>
>>>>>>>>>>> Is there a way to get the url after the "http://host/CADRe/"
>>>>>>>>>>> in this case "test.jsf" in jsftemplating?
>>>>>>>>>>>
>>>>>>>>>>> thanks
>>>>>>>>>>> -Karam