星期四, 二月 12, 2004

JSP 和Servlet如何共享 JavaBean?JSP and Servlet how to share JavaBean?

问题提出:
我们需要在提交JSP后,如果出现Business Logic error或其他的Exception.当返回JSP页面的时候,可以在页面的某一个区域出现所有的提示并保留原来填写的内容。

方案:
1.PageContext 是个良好的入口,可惜只是JSP的包装器(wrapper).
2.利用getRequestDispatcher来实现,并把对象传递到页面里.

实现步骤:
1。首先定制JavaBean.
/**
* ErrorViewHelper JavaBean
**/
package com.javafans.Exception;
import java.util.*;
public class ErrorViewHelper
{
private ArrayList errormsg = new ArrayList();
public void setMsg(String msg)
{
errormsg.add("test");
}
public String getMsg()
{
String returnstr="12";
for(int i=0;i<errormsg.size();i++)
returnstr += errormsg.get(i)+"<br>";
return returnstr;
}
}

2.在JSP里面使用<jsp:useBean>
<jsp:useBean id="errorhelper" scope="request" class="com.javafans.Exception.ErrorViewHelper">
</jsp:useBean>
<jsp:getProperty name="errorhelper" property="msg"/>

3.在Servlet 中定义,并把对象传递回来.
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType(CONTENT_TYPE);
PrintWriter out = response.getWriter();
com.javafans.Exception.ErrorViewHelper temptest = new test();
temptest.setMsg("test");
request.setAttribute("errorhelper",temptest);//关键.1
RequestDispatcher rd;//关键 2
rd = getServletContext().getRequestDispatcher("/index.jsp"); //关键 3.
rd.forward(request,response); //关键 4
}

ok.