dev@jsftemplating.java.net

Re: JSFTemplating: How to get the page url?

From: Karam Singh Badesha <Karam.Badesha_at_Sun.COM>
Date: Thu, 17 Jan 2008 11:15:13 -0800

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