填报监听类中校验出错时弹出提示窗口
在填报表的检验中,经常会遇到这样一个需求:户要在填报监听类中做些校验。填报监听类中校验出错了就会抛出一个异常,返回后页面填入的数据就会丢失。客户希望像普通的单元格校验一样弹出一个警告窗口而不是跳到错误页面,页面的数据不会丢失。
实现方法
首先在填报监听类中用servlet输出一段用来弹出提示框的js代码:
public class demoServlet extends HttpServlet
{
public void doGet(HttpServletRequest req,HttpServletResponse res) throws IOException,ServletException
{
// request.getRequestDispatcher(”jsp/aa.jsp”).forward(request,response); //跳转到其他页面。可能被当作弹出窗口拦截
res.setContentType(”text/html”);
PrintWriter out = res.getWriter();
out.println(”<body onload=javascript:alert(’注意!!!!!!!!!!!!!!!!!校验未通过,此次提交将不执行’)>”); //用js代码弹出警告框
out.close();
}
}
在校验未通过的情况下,执行这个doGet方法,并且抛出异常,阻止程序继续执行提交命令。
在jsp中应用报表的标签加入submitTarget=”test”属性。将异常页面显示到id为test的iframe中:
将这个iframe隐藏起来:
<div style=”display:none”>
<iframe name=test id=test >
</iframe>
</div>
这样,填报提交时,监听类会进行校验,如果失败,将弹出警告框,提示用户数据输入有误。页面不会刷新,填报值仍然保留。当然这样做填报成功也不会刷新页面。
例子代码
package runqian.com;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.runqian.report4.usermodel.input.AbstractInputListener;
public class Processor222 extends AbstractInputListener{
public void beforeSave()throws Exception {
HttpSession session=request.getSession();
String username=(String) session.getAttribute(”username”);
if(username==null){
demoServlet ds = new demoServlet();
ds.doGet(request, response); //执行这个方法弹出提示框(方法在下面定义)
throw new Exception(”校验未通过”); //终止程序继续执行。
}
}
public class demoServlet extends HttpServlet
{
public void doGet(HttpServletRequest req,HttpServletResponse res) throws IOException,ServletException
{
// request.getRequestDispatcher(”jsp/aa.jsp”).forward(request,response); //跳转到其他页面。可能被当作弹出窗口拦截
res.setContentType(”text/html”);
PrintWriter out = res.getWriter();
out.println(”<body onload=javascript:alert(’注意!!!!!!!!!!!!!!!!!校验未通过,此次提交将不执行’)>”);
out.close();
}
}
}