很多兄弟问到birt的权限控制问题,我这里只是简单的说两个方法,而且是很简单的方法,实际操作中可能不是太实用。
第一种方法通过参数控制:
页面报表就是一个简单的报表,这里我是太偷懒了。嘿嘿。 只有个参数,接收前台传进来的数据。
报表如上图添加两个标签,一个标签普通用户可以查看,另一个标签管理员可以查看。
设置标签的隐藏性。
隐藏代码:
if(params["user"].value=='user'){ //如果参数值为user,则显示。
false;
}else{
true;
}
关于隐藏性论坛有太多的教程了,自己搜索一下吧。
然后我们看页面代码:
<div>
<!-- 显示角色选择列表 -->
<select name='s1'>
<option value='user'>普通用户</option>
<option value='admin'>管理员</option>
</select>
</div>
<div>
<!-- 显示报表的iframe -->
<iframe id="iframe1" style='width:600px;height:500px;border:1px solid gray;'></iframe>
</div>
_showReport方法:
function _showReport(s){
var url="/birt2.3/preview?__report=/report/birthome/role1.rptdesign&user="+s.value;
document.getElementById('iframe1').src=url;
}
这里我想说一下,那个角色列表,我们在实际操作中,最后是通过后台得到一个角色列表。
运行结果如下:
第二种方法通过session的数据来处理。
先看一下页面。
<div>
<input type='button' value='显示报表'>
</div>
<div>
<iframe id="iframe1" style='width:600px;height:500px;border:1px solid gray;'></iframe>
</div>
_showReport()的代码如下:
function _showReport(){
var url="/birt2.3/preview?__report=/report/birthome/role2.rptdesign&__parameterpage=false";
document.getElementById('iframe1').src=url;
}
当然这里,我们是通过之前保存在session里的用户数据判断的,我把这个代码写在了jsp里,如下:
<%
request.getSession().setAttribute("user","admin");
%>
我们再看一下报表:
还是上面的报表,不过在报表的beforeFactory里加了以下的代码
importPackage(Packages.org.eclipse.equinox.http.servlet.internal); //导入相关的类,其实这里是导入了包,你会发现,其实这个request和session并不是我们以为的request和session.
var request = reportContext.getHttpServletRequest();
session = request.getSession();
var user = session.getAttribute("user");
reportContext.setParameterValue("user",user); //改变参数的值。
上面其实没什么,得到request,得到session,其实重要的是发现这个request是哪个类,通过getHttpServletRequest这个名字我一开始以为是HttpservletRequest所以操作总出错。
运行效果大概就这样:
我相关的文件附上,省得出现一些其他问题。
role.rar (4 K) 下载次数:33
注意一下目录结构。
另外说一下,运行的时候,控制台会报个:
Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment support is disabled.
这可能webviewer在哪里使用了javamial,加上javamail的包就行了。
一个是mail.jar,一个是activation-1.1.jar