3

我有一种情况,我需要更新名称保持不变的 setAttribute 的值。考虑以下情况作为示例 -
假设我有三个 JSP:abc.jsp、xyz.jsp、pqr.jsp。现在首先运行 abc.jsp,然后将控制转发到 xyz.jsp,然后转发到 pqr.jsp。现在在执行 pqr.jsp 后,控件再次返回 xyz.jsp,并在 setAttribute 处更新了值。
abc.jsp:

ArrayList<Books> getSupplyStatus=new ArrayList<Books>();
JavaBean javaBean=new JavaBean();
session=request.getSession(false);
getSupplyStatus=javaBean.getSupplyStatus(memberID); //It returns a ArrayList 
if(!getSupplyStatus.isEmpty())
{
  session.setAttribute("UpdatedBooklist", getSupplyStatus);
  request.getRequestDispatcher("xyz.jsp").forward(request, response);
}

xyz.jsp:

session=request.getSession(false);
ArrayList<Books> getSupplyStatus=(ArrayList<Books>) session.getAttribute("UpdatedBooklist");
// some operations & forward to pqr.jsp

pqr.jsp:

// in this jsp new ArrayList<Books> will be prodeuced
// & I need to bound the value of "UpdatedBooklist" with 
// which is set in abc.jsp,
// and previous value must be override & then forward to xyz.jsp again
// In xyz.jsp we recieve the updated value.
4

1 回答 1

7

再次使用 setAttribute() 将替换该值并调用必要的生命周期方法。

如果一个对象已经绑定到此名称的实现 HttpSessionBindingListener 的会话,则调用其 HttpSessionBindingListener.valueUnbound 方法。

您还可以使用removeAttribute()并再次设置具有相同名称的属性。如果通过“更新”表示您希望对象更新而不是替换,那么获取属性getAttribute()并在其上调用将改变对象的方法。

于 2013-04-10T05:43:50.690 回答