润乾报表实现参数模板校验的解决方案---参数监听类

需求背景:

前些日子,有个客户咨询校验问题,在参数模板中使用校验,点查询时触发校验,正常过滤,但是现在的用户习惯于使用enter键提交,则不会触发校验。

场景模拟:

做一个订单表wangge2.raq,另做一个参数模板wangge2_arg.raq,以订单ID为参数,校验描述为订单ID<10257

下图为输入订单ID点击查询按钮正常触发校验


下图为输入订单ID直接按enter键未触发校验


由上图可见,校验失败,用户查出了错误数据。

解决方案:

利用参数监听类实现,不管客户点击查询按钮还是直接按enter键查询,最终都会进入到参数监听类中进行业务处理,在参数监听类中判断得到订单ID的值,如果值大于等于10257,则会alert窗口提示错误,并重定向到页面重新输入。如果订单ID的值符合查询条件,则正常查询

实现步骤:

一:编写参数监听类ParamProcessor

package com.runqian;

import java.io.IOException;

import java.io.PrintWriter;

import java.util.Hashtable;

import javax.servlet.ServletContext;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import com.runqian.report4.usermodel.Context;

import com.runqian.report4.usermodel.input.AbstractParamProcessor;

public class ParamProcessor extends AbstractParamProcessor {

    @Override

    public String[] getParamNames() {

       // TODO Auto-generated method stub

       return super.getParamNames();

    }

    @Override

    public String getParamValue(String arg0) {

       // TODO Auto-generated method stub

       return super.getParamValue(arg0);

    }

    @Override

    public void process() throws Exception {

       // TODO Auto-generated method stub

       String orderid = request.getParameter("orderid");

       System.out.println(orderid);

       int orderid2 = Integer.parseInt(orderid);

       if (orderid2 >= 10258) {

           TipsServlet ts = new TipsServlet();

           ts.doGet(requestresponse); // 执行这个方法弹出提示框          throw newException("校验未通过"); // 终止程序继续执行。

       }

    }

    public class TipsServlet extends HttpServlet {

       /**

        * 定义内部类实现alert窗口,并负责页面的重定向

        */

       private static final long serialVersionUID = 3733704363216916721L;

       public void doGet(HttpServletRequest req, HttpServletResponse res)

              throws IOException, ServletException {

//设置页面编码

           res.setContentType("text/html;charset=gb2312");

//创建PrintWriter对象

           PrintWriter out = res.getWriter();

//定义alert及重定向

           out .println("<body   οnlοad=javascript:alert('订单ID应小于10257!');top.location.href='reportJsp/showReport.jsp?raq=wangge2.raq'>");

           out.close();

       }

    }

    @Override

    public void putParam(String arg0, String arg1) {

       // TODO Auto-generated method stub

       super.putParam(arg0, arg1);

    }

    @Override

    public void setContext(Context arg0, Hashtable arg1,

           HttpServletRequest arg2, HttpServletResponse arg3,

           ServletContext arg4) {

       // TODO Auto-generated method stub

       super.setContext(arg0, arg1, arg2, arg3, arg4);

    }

}

二:修改参数模板的TAG标签

红色部分为使用参数监听类的标签

         <report:param name="form1" paramFileName="<%=paramFile%>"

                            needSubmit="no"

                            params="<%=param.toString()%>"

                            processor ="com.runqian.ParamProcessor"

                   />

三:copy 编译后的calss文件至calsses下的相应目录下

四:重启应用服务器

效果图

下图为输入不符合条件的订单ID后直接按enter键


下图为提示的错误窗口


最后返回重新录入数据的页面


总结:

对于参数模板的验证,我们可以采用参数监听类的放法实现,当然参数监听类的功能是非常强大的,凡事需要对参数来进行业务处理的需求,我们都可以考虑参数监听类。

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值