This week's giveaway is in the EJB and other Java EE Technologies forum.
We're giving away four copies of EJB 3 in Action and have Debu Panda, Reza Rahman, Ryan Cuprak, and Michael Remijan on-line!
See this thread for details.
The moose likes JSF and the fly likes Problem in setting bean scope to request Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of EJB 3 in Action this week in the EJB and other Java EE Technologies forum!
JavaRanch » Java Forums » Java » JSF
Bookmark "Problem in setting bean scope to request" Watch "Problem in setting bean scope to request" New topic
Author

Problem in setting bean scope to request

Abhijeet Vaidya
Greenhorn

Joined: Apr 16, 2007
Posts: 20
Hi,

I am trying to implement a very simple example, where I am invoking one jsp from another using jsf and spring framework. given below are the code snippets -

web.xml contents -


<?xml version="1.0"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
<!--context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param-->

<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>server</param-value>
</context-param>

<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!-- Faces Servlet -->
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>-1</load-on-startup>
</servlet>


<!-- Faces Servlet Mapping -->
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>

</web-app>

faces-config contents -

<?xml version="1.0"?>
<!DOCTYPE faces-config PUBLIC
"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
"http://java.sun.com/dtd/web-facesconfig_1_1.dtd">

<faces-config>

<application>
<variable-resolver>
org.springframework.web.jsf.DelegatingVariableResolver
</variable-resolver>
</application>

<managed-bean>
<description>
Backing bean that contains transaction information.
</description>
<managed-bean-name>firstBean</managed-bean-name>
<managed-bean-class>com.rnd.web.faces.backinbean.FirstBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>

<navigation-rule>
<from-view-id>/pages/one.jsp</from-view-id>
<navigation-case>
<from-outcome>second</from-outcome>
<to-view-id>/pages/two.jsp </to-view-id>
<redirect/>
</navigation-case>
</navigation-rule>

</faces-config>

application-context contents -


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">

<bean id="firstBean" class="com.rnd.web.faces.backinbean.FirstBean" scope="request">
</bean>
</beans>

I am calling FirstBean.firstToSecondMethod from one.jsp, setting some values in the method and calling two.jsp -

public String firstToSecMethod(){
System.out.println("inside java method.. ");
firstProp = "prop set in FirstBean java";
secondProp = 10;
return "second";
}

but two.jsp does not display the values

<td><hutputText value="#{firstBean.firstProp}"/></td>

after changing the bean scope to session values are getting displayed properly.

I am not sure why this is happening.

I think request scope should work fine. Please advise.


Thanks,
Abhijeet
Darryl Nortje
Ranch Hand

Joined: Jun 11, 2002
Posts: 140
I think it's similar to http request and session scope.

For example, if on 1 page you set a value on the request, and forward to another page and try to read that value off the request object, you won't get it. A new request object has been created for that page.

If you want to get values from a previous page you have to store those values on the session.

JSF has 4 scopes, None, Request, Session and Application.

So let's say you had a LoginBean, that only did some kind of verification, nothing else. You would put that into the request scope, and call it when the user clicked login, for example. but now let's say after logon, you want to say hello to that user, so he logs on as billybob, and upon successfully logon, you want to say hello billybob, And you want to read the username from the bean, you will have to put that bean into the session scope, so that it is not discarded when you forward to the welcome page.

Does this make sense?
Abhijeet Vaidya
Greenhorn

Joined: Apr 16, 2007
Posts: 20
Thanks for your reply.

yeah, that's what it looks like. But won't it cause too much load on the server? if practically, backing beans (with domain objects) are same for data input and display and all are stored in session?

Also, if we do request.setAttribute() in java method, we can access those values in normal jsp, but it seems like that is not happening in case of JSF.

Correct me if I am wrong.


Thanks,
Abhijeet
[ June 02, 2008: Message edited by: Abhijeet Vaidya ]
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Problem in setting bean scope to request
 
Similar Threads
Spring security and jsf Integration
unable to call AOP method
struts-spring-hibernate integration
Acegi Configuration
JSF Spring integration