本章主要介绍参数表单的原理、用途、详细说明及校验。
◆ 实例请参考TAG实例 / html模式发布报表 / 参数
原理和用途:
在报表设计好后,往往需要向报表中传递参数,传统的方式需要用户来定义参数输入表单,例如:
<form method=post action="<%=request.getContextPath()%>/myReport.jsp">
<table>
<tr style="FONT-SIZE: 13px; FONT-FAMILY: 宋体">
<td style="COLOR: cornflowerblue"> 性别</td>
<td>
<select name="sex" style="WIDTH: 70px">
<option value=1>男</option>
<option value=2>女</option>
</select>
</td>
<td style="COLOR: dodgerblue"> 班级</td>
<td>
<select name="class" style="WIDTH: 70px">
<option value=1>一班</option>
<option value=2>二班</option>
</select>
</td>
<td> <input type=submit value=查询 style="FONT-SIZE: 13px; WIDTH: 40px; COLOR: mediumblue; FONT-FAMILY: 宋体; HEIGHT: 22px; BACKGROUND-COLOR: wheat"></td>
</tr>
</table>
</form>
此时,要求满足:
Ø 参数个数必须与要显示的报表所设计的参数个数一致(如未输入则使用报表设计时填的缺省值),参数名称也大小写相同
Ø 在myReport.jsp(或自己的jsp/servlet)中用request.getPararmeter(“***”)来取得各参数,并把参数拼成润乾报表能支持的参数串
Ø 把拼成的参数串通过html标签中的params属性传递到报表中
这是相当麻烦的过程,如果要实现相同的功能,又可以把参数表单的设计在报表设计器中完成,那么可以使用tag生成参数表单。其原理是,在设计器中,新建“参数模板”报表,将其设计成参数模板,为每个输入格设置编辑风格和“变量名”属性,在web服务端通过<prefix:param>标签对本参数模板解析生成对应的参数表单。注意,“变量名”属性值大小写应该与实际报表中的参数大小写一致。其大致过程如图1.2.1所示:
图1.2.1:用参数模板生成参数表单过程图
前面介绍的报表tag标签中有一个params属性,可以用来为报表输入参数的值。
其格式为:
<report:html ……
params="param1=value1;param2=value2;……"
……
/>
参数的个数应该与报表中的参数个数相同,参数名大小写一致。
如果参数值值是变化的,那么应该先在JSP代码中将参数串拼好,再传入tag中,如下所示:
<%
String params = "param1=" + value1 + ";param2=" + value2 + ";" ……"%>
或
<report:html ……
params="<%=params%>"
……
/>
以上是传统的做法。使用参数表单模板的做法是:用设计器设置一个参数模板,以此生成一个能输入报表参数,并能对报表进行报表查询的html form表单。在JSP文件中用<prefix:param> 标签来发布,prefix是用户在JSP文件头中指定tag定义文件时指定的前缀名。该定义语句如下所示:
<%@ taglib uri=”/WEB-INF/raqsoftReport.tld” prefix=”report” %>
此定义语句必须写在JSP的开头,其中prefix的值可以自己指定,但tag标签中的前缀必须与其保持一致。
然后在要发布报表的地方用上面介绍的tag标签来发布,如:
<report:param name=……paramFileName=…./>
此标签的属性说明见下表:
(属性名都是大小写相关,属性值必须放在双引号中)
属性名 |
是否必填 |
属性含义 |
属性取值 |
缺省值 |
name |
是 |
参数表单form在网页中的ID标识 |
符合变量命名规则的字符串,在本网页中应是唯一的 |
无 |
srcType |
否 |
参数表单源的类型 |
同html报表 |
file |
paramFileName |
否 |
生成参数表单的RPX文件名 |
报表文件名,如为""或"null",则不生成表单 |
无 |
beanName |
否 |
当参数表单源类型为defineBean或reportBean时,已保存到request中的bean的名称或报表缓存池中的缓存ID |
符合变量命名规则的字符串,与保存参数表单源bean时的名称一致 |
无 |
contextName |
否 |
同html单表参数模板式报表 |
变量名 |
无 |
resultPage |
否 |
提交参数后,显示报表结果的页面 |
相对于应用根目录的页面URL |
当前页面 |
target |
否 |
显示结果的窗体名 |
与html form的target属性取值相同 |
当前窗体,_self |
hiddenParams |
否 |
一些隐含的参数,如登录用户名、用户身份等 |
与3.1中的params取值相同 |
无 |
needSubmit |
否 |
是否需要自动生成提交参数的按钮 |
Yes或no |
yes |
submitLabel |
否 |
提交钮的外观定义 |
html元素或文字 |
查询 |
params |
否 |
生成此参数表单时需用到的报表参数,一般用于下拉数据窗口中的数据过滤条件 |
与html报表中的params相同 |
无 |
exceptionPage |
否 |
显示参数表单异常信息的JSP页面 |
页面相对于应用根目录的路径名 |
无 |
processor |
否 |
参数提交时,预先进行一些处理的java类名 |
从com.raqsoft.report.usermodel.input.AbstractParamProcessor继承的java类名 |
无 |
needInputCssStyle |
否 |
是否需要使用报表中设计的单元格样式,如字体、颜色等 |
yes或no |
yes |
needImportEasyui |
否 |
是否需要引入easyui的js和css文件,如需修改easyui的主题风格可参考修改easyui插件的主题小节 |
yes或no |
yes |
theme |
否 |
编辑控件的外观主题风格 |
default,black,bootstrap,gray,metro |
default |
callback |
否 |
参数表单提交后的回调js函数名,当用户提供此函数后,表单采用ajax的方式提交,不刷新页面,系统将resultPage的内容作为参数去调用callback函数 |
函数名 |
无 |
mobileMode |
否 |
指定参数表单是否使用手机模式发布,见注1 |
yes或no |
无(不指定此参数时程序自动检测浏览器的user-agent来判断是否是手机浏览器) |
hasParamFold |
否 |
是否显示参数表单的折叠栏 |
yes 或 no |
no |
resultContainer |
否 |
查询结果显示在页面中的哪个容器里(html对象,比如div) ,见注2 |
取值是容器的id |
无 |
usePagedBox |
否 |
控制参数表单中下拉选项的分页,支持的编辑风格有下拉列表框、下拉数据集 |
正整数,指每页显示N条选项 如果是0,表示不分页 |
0 |
scale |
否 |
参数表单缩放显示比例 |
实数 |
1.0 |
注1:
手机端使用参数模板时,mobileMode属性值需设置为yes。参数表单和报表分为两个页面,独立显示,通过<report:param>标签访问参数表单页面,在标签中添加resultPage属性指定报表查询结果页面。
手机端参数模板限制条件为:表单只有前两列有效,列宽设计无效。第一列是参数提示,第二列是输入区,第二列会与屏幕宽度自适应。所以从第三列开始往后都是无效的。
注2:
在使用resultContainer属性时,要同时指定resultPage属性,一般resultPage里应该只有显示报表的tag,就像queryXXX.jsp一样,可以参考showXXX.jsp里的用法。
系统JS函数:
getParamValue (paramName)
参数说明:
paramName 参数表单中的参数名
功能说明:
获取参数表单中某个参数值
返回值:
字符串
举例:
表单有两个参数begin和end,分别代表开始日期和结束日期,要求开始日期不能大于结束日期,实现方式如下:
【报表】-【报表属性】:
在参数表单的报表属性中填写一段用于校验的js,当提交参数时会调用这段脚本。如果输入的参数全都满足要求,则返回true;某个参数不满足要求时,弹出信息,并返回false。