You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by "Tuan H. Le" <tu...@phsadc.com> on 2002/11/08 02:47:23 UTC

data in session sometimes not get updated???

Hi,

I'm having a bug in my application that the user's session attribute SOMETIMES does not get updated/refreshed as expected, but I don't know the reason why. Please advise what I'm doing wrong. Here is my test scenario

1) UserAction class fetches a list of employees with review status and store the list in an ArrayList
2) UserAction class set this ArrayList object in a session attribute
3) UserAction class forwards to a view
4) A view uses above ArrayList object in session to display a list of employees with their review status (reject/approve)
5) The user selects one or more employees and submit for approval or/and rejection
6) UserAction class saves the employee(s) review status
7) UserAction class rebuilds the ArrayList by fetching from a database
8)  same as step 2
9)  same as step 3
10)  same as step 4

I debugged the code and I found that the data get saved correctly in step 6 and returned with updated values in step 7. But, SOMETIMES that data in a session attribute does not get updated. If I refresh browser window, it displays the new updated data.


Here's my code snippet

####### UserAction class ##########

      . . .
      // get a list of employees. Returns an array list of EmployeeVO objects
      List employeeList = employeeDAO.getEmployeeReviewList( manager.getEmployeeId() );
    
      // make sure to destroy previous employeeList object before setting a new one
      List tmpObj = (List)session.getAttribute( USER_EMPLOYEE_LIST_VIEW_KEY );
      tmpObj = null;
      // now set the object in a session attributes
      session.setAttribute( USER_EMPLOYEE_LIST_VIEW_KEY, employeeList );
      . . .

######## Value Object ###########

/**
 * The Value Object will be placed in the session; therefore it needs to be
 * serializable so the container can persist sessions if needed.
 */
public class EmployeeVO extends PersonVO implements Serializable {
    . . .
}

######## JSP View ############

<jsp:useBean id="employeeList" scope="session" class="java.util.ArrayList" />
<%
  // number of employees returned from the list
  if ( employeeList != null ) {
    int listSize = employeeList.size();
  }
%>

<html:html locale="true">
<head>
  <html:base/>
  <title><bean:message key="app.label.title" /></title>
  <link rel="stylesheet" type="text/css" href="common/styles/styleMid.css">
  <script language="javaScript">
<%@ include file="CommonJSFunctions.js"%>
  </script>
</head>

<body>
<html:form action="/approveSubmit"
           name="approveSubmitForm"
           type="com.phs.ezhr.presentation.form.ApproveSubmitForm"
           method="POST"
           target="_parent">

<tabe>
<logic:present name="employeeList" scope="session">
  <!-- Iterate over the results of the query. Max of 25 records per page -->
  <logic:iterate id="employee" name="employeeList" scope="session" type="com.phs.ezhr.business.vo.EmployeeVO" indexId="idx" length="25" offset="<%= ""+count %>">
      // ------------------------------------------------------------------
      // output employee data with review status here.
      // I'm using JSP scripting instead of <bean:write> tag
      // Could this have any conflicts?????? Below is a sample code
      // ------------------------------------------------------------------
      <tr>
        <td><%= employee.getReviewStatus() %></td>
      </tr>
  </logic:iterate>
</logic:present>
</table>
</html:form>
</body>
</html:html>