知识库

推荐内容

快逸做的更好

产品优势

您的位置: 首页 > 知识库 > 设计基础 > 快逸报表与web应用结合时的多种页面跳转方式介绍(二)

快逸报表与web应用结合时的多种页面跳转方式介绍(二)

在上一篇文章《快逸报表与web应用结合时的多种页面跳转方式介绍(一)》的最后提到了这样的问题:如果页面上有两个或两个以上的按钮,点击一个要提交数据并跳转到另一个页面,点击另外的提交按钮时不执行页面跳转,这时backAndRefresh标签似乎显得有些力不从心了。本文将介绍如何解决这个问题。

通过填报监听类实现页面跳转

首先,注意下图中两个按钮的细节:

提交按钮定义:=<input type=”button” onClick=”submit_task()” value=”提交”>

两个按钮的onClick事件分别调用了task_time()、submit_task()函数。
其次,关注如下这两个函数:

function task_time(){
document.getElementById(”report1_J1″).innerText = ‘1′; //设置J1单元格真实值为1
document.getElementById(”report1_J1″).value = ‘1′; //设置J1单元格显示值为1
report1_save();
}

function submit_task(){
document.getElementById(”report1_J1″).innerText = ‘0′; //设置J1单元格真实值为1
document.getElementById(”report1_J1″).value = ‘0′; //设置J1单元格显示值为1
report1_save();
}

之所以要设置单元格的值是因为使用填报监听类处理跳转的思路是这样的:

在监听类中判断当前点击的是”下一步”还是”提交”按钮,再去执行相关操作,因此需要在报表的某个单元格(J1)中标记当前点击的是哪个按钮,通过两个按钮的onClick事件来调用不同的设置单元格值的函数。

再次,我们看一下填报监听类的细节,

public class AddTaskSendMail_new extends AbstractInputListener {
public void afterCommit() throws Exception {
String contextPath = request.getContextPath();
//第一个更新属性
InputSQL inputSql2 = this.getInputSql()[0];
//第14个更新记录
String str_time = inputSql2.getParams()[13].toString();
if(”1″.equals(str_time)){
String url = contextPath+”/mis2/reportcenter/showReport_all.jsp?raq=task_yuyue.raq&sys_docType=16&taskID=”+str_taskid;
response.sendRedirect(url);
}
}
}

监听类只能得到入库单元格的值,所以需要先将J1写入更新属性,如下图:

AbstractInputListener接口提供了response对象的sendRedirect()方法实现页面跳转,关于填报监听类的更多细节,请参考教程。

最后,在发布报表的JSP中指定inputListener标签为:

<report:html name=”report1″ reportFileName=”<%=raqpath%>”
funcBarLocation=””
needPageMark=”yes”
generateParamForm=”no”
params=”<%=params.toString()%>”
inputListener=”com.aq.inputListener.AddTaskSendMail_new”
/>

至此,本文最开始提到的需求已实现。

本文标签:
发布日期:2010/05/21
本文分类: 设计基础