• 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

Doubt regarding useBean and getAttribute

 
Greenhorn
Posts: 29
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Hi,

I have this servlet : UseBeanTest.java



and this JSp : result.jsp



Person is a simle Java Bean having property "name".

When I access the Servlet, the output is

Person from getProperty: TestUser
Person from session:


I am not able to understand why "TestUser" is not shown in second line, since a session scoped attribute is successfully set, as verified by first line,

it works fine and TestUser is shown in both lines in these two cases

a) If I comment out the line 1) in servlet
b) Reverse the attribute scopes in Servlet and Jsp, i.e uncomment the lines 2) and 3) in Servlet and use scope = "request" in jsp

Please help me understanding the logic behind these observations

Regards.
Nitin
 
Sheriff
Posts: 14691
16
Eclipse IDE VI Editor Ubuntu
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
That's an example of the kind of problems which may arrise when you put attribute with the same name in different scopes. The getProperty/setProperty actions look for "person" in one of the scopes, using findAttribute, and finds it in the request scope. So you're actually setting TestUser into the person in request scope.

JSP.5.3 <jsp:getProperty>

The value of the name attribute in jsp:setProperty and jsp:getProperty will refer to an object that is obtained from the pageContext object through its findAttribute method.


However, the spec continues :

The object named by the name must have been "introduced" to the JSP processor using either the jsp:useBean action or a custom action with an associated VariableInfo entry for this name. If the object was not introduced in this manner, the container implementation is recommended (but not required) to raise a translation error, since the page implementation is in violation of the specification.
Note : A consequence of the previous paragraph is that objects that are stored in, say, the session by a front component are not automatically visible to jsp:setProperty and jsp:getProperty actions in that page unless a jsp:useBean action, or some other action, makes them visible.


I would expect the container to either skip the person in the request scope, or to raise an error, but as the spec says, the container implementation is recommended (but not required) to raise a translation error. Your container chooses to use the attribute that was set by the servlet, even if it's not been introduced by the jsp:useBean action.
 
Nitin Kumar
Greenhorn
Posts: 29
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Hi Christophe,

Thank you for the explaination. It means we should try to avoid using same attributes in different scopes.

Nitin
 
With a little knowledge, a cast iron skillet is non-stick and lasts a lifetime.
reply
    Bookmark Topic Watch Topic
  • New Topic