• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Jeanne Boyarsky
  • Ron McLeod
  • Paul Clapham
  • Liutauras Vilda
Sheriffs:
  • paul wheaton
  • Rob Spoor
  • Devaka Cooray
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Carey Brown
  • Frits Walraven
  • Tim Moores
Bartenders:
  • Mikalai Zaikin

JSF and REST urls

 
Greenhorn
Posts: 6
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Hi,
I have been looking for an active Java community for a while. Looks like I just found the right place. I'm developping my first JSF application. I understand the basics of JSF with the navigation map and everything as POST. However, sometimes you need to use GET for usability's sake.

I would like to be able to have URLs like the following in some cases:

http://myserver.com/myapp/clients/view.jsf?id=46

or better:

http://myserver.com/myapp/clients/view/46

How can I achieve this with JSF ? I tried creating a request scoped bean that gets the GET parameter in the constructor but it looks like the bean is recreated everytime the page is posted back as the constructor gets called everytime.

This is useful for pasting urls in emails.

Thanks for your help.
 
Ranch Hand
Posts: 362
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
You can check the solution on my post here
https://coderanch.com/t/211444/JSF/java/method-JSF
[ April 23, 2006: Message edited by: Gerardo Tasistro ]
 
Jean-Philippe Toupin
Greenhorn
Posts: 6
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Thanks for your reply.

I found this solution which looks cleaner:



However, when a button is clicked and an action is triggered on the backing bean, the page is posted back to the url without the query string and I get a null pointer exception. I thought a request scoped bean would persist between postbacks ?
 
Gerardo Tasistro
Ranch Hand
Posts: 362
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
It might be passing a null value to your setter method and your logic might not be checking for it. Have you tried checking for null in the setter of ID and not update the value if ID=null?
 
Jean-Philippe Toupin
Greenhorn
Posts: 6
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Gerardo,
thank you very much for your help.

It is indeed passing the NULL value to my bean and this is normal. The problem is that I access my jsf page with the following url:

/clients/view.jsf?id=46

Then, I have a button which triggers an action on the bean. The action method gets called on the bean and the browser is redirected to:

/clients/view.jsf (without the id query string)

Hence why the NULL value. Is there anyway to make jsf post back with the same query string the page got originally called ?
 
Gerardo Tasistro
Ranch Hand
Posts: 362
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Jean, there are two scenarios I usually come about in these cases.

One is the session scoped bean and the other is the request scoped bean. In the case of session scoped beans I use the setProperty call to init the bean. In that sense I do a "No no" of beans which is include some sort of business logic in the setId call. Thus I use the existence of a GET variable as a means to signal and initialize the page or application. It isn't orthodox, but it works. Since the setProperty will not be called if the GET variable isn't set the application is only initialized once.

For example in your scenario I would use the setProperty to call setId only when ?id=46 exists on the URL. The setId method accesses the database and loads cliend 46 and displays it. All work will be done on client 46 since the bean is session scoped and the ID need not be set again.

The other case is the request scope. In such a case the ID will be forgotten between requests (well actually the whole bean). So I use hidden variables. I call the use Bean and setProperty early in the JSP. After that a managed bean exists of name clientBean (to put a name on it). Within the form it is valid now to do ...



Your ID value will now be propagated through succesive posts.
 
Jean-Philippe Toupin
Greenhorn
Posts: 6
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Gerardo,
thanka for your very helpful reply.

I will try your method and see how things work.

Thanks again.
[ April 25, 2006: Message edited by: Jean-Philippe Toupin ]
 
Greenhorn
Posts: 24
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
This post is a bit old, but try this JSF extension. It was released recently:

http://ocpsoft.com/prettyfaces
 
Consider Paul's rocket mass heater.
reply
    Bookmark Topic Watch Topic
  • New Topic