润乾报表-异步加载动态过滤下拉表实例

来源:互联网 发布:网络的世界的英文单词 编辑:程序博客网 时间:2024/06/05 04:34
如下是异步加载动态过滤下拉表的做法,但近看该说明还是有大部分用户做不出来,本文将结合实例介绍具体的实现方式。
做法:
1、设计器设计参数表单,假如有两个下拉数据表A、B,分别对应参数arg1、arg2,选择A以后过滤B。设计时A设计完整,B可以设计时加一个过滤条件让它取不到数或数据特少。
2、在显示参数表单的jsp里,用户写一个下面这样的js函数,这是下拉表选择后会调用的js函数,cellId是下拉控件所在单元格id,newValue是新的下拉值, argName是参数名
function _selectValueChanged( cellId,newValue, argName ) {
       if(argName == "productTypes" ) {
              varparams = { "arg1": newValue };
              $.post(url, params, function( data ) {
                     data= eval( "(" + data.trim() + ")" );
                     $("#arg2").combobox("loadData", data ); //将新的节点数据设置到arg2
              },"text");
       }
}
示例中的url是服务器上的一个servlet或jsp等服务程序, 根据ajax传上去的参数params,为arg2取回新的数据,数据的格式如下:
[{ v:"v1",d:"选项1"},{ v:"v2",d:"选项2"},......,{v:"vn",d:"选项n"}]
v表示真实值,d表示显示值
具体实现:
1、 准备一个参数表单及结果报表
(1)    参数表单:产品类别(web名:productTypes)、产品名称(productName)
y1.png
选择产品类别后 有后台计算对应的可选产品名称列表并返回给 下拉列表
(2)    结果报表仅演示接收两个
y2.png
2、 Jsp内定义上面2中的方法
function_selectValueChanged( cellId, newValue, argName ) {
//如果是productTyps下拉,则触发
if( argName == "productTypes" ) {
     varurl = "rv.jsp";//异步请求的服务器文件,此处为jsp
        var params = { "productTypes":newValue };
        $.post( url, params, function( data ) {
               alert(data);
               data = eval( "(" +data.trim() + ")" );
               $("#productName").combobox("loadData", data ); //将新的节点数据设置到productName下拉项
        }, "text");
}
}
3、 定义异步处理并返回数据的url
看上一步url为 rv.jsp(与展现报表的jsp同目录),核心代码:
<%@ page contentType="text/html;charset=UTF-8" %>
<%
// 定义并返回规定格式的串
String strv ="[{v:'2',d:'22'},{v:'1',d:'11'},{v:'3',d:'33'}]";
out.print(strv);
%>
4、 看效果
y3.png
产品名称处的下拉可选项即改变为 赋值后的数据。
注:url的jsp可以接受到参数后处理更复杂的逻辑再返回(如最简单的根据所选类别,后台数据库帅选出合适的数据),本文为结合实例讲解具体的流程,方便大家上手。
原创粉丝点击