业务背景:使用数据的上传与下达功能来实现数据权限的控制,当普通用户点击上传后,就禁止显示修改和删除的按钮,关闭入口。当管理员点击下达按钮时,就将之前禁止显示的修改和删除按钮再次提供入口给普通用户。这些都是通过修改标志位和编写控制表达式来实现的。
(普通用户)上报功能实现步骤:
(1)在上报单元格编写超链接如下【tomcat和Websphere下都一样】
"javascript:update_status('econrespList.jsp','ECONRESP','FLAG','UUID','"+A3+"')"
"javascript:update_status('enterpriseList.jsp','ENTERPRISE','FLAG','UUID','"+A3+"')"
"javascript:update_status('financeList.jsp','FINANCE','FLAG','UUID','"+A3+"')"
"javascript:update_status('socialSecurityList.jsp','SOCIALSECURITY','FLAG','UUID','"+A3+"')"
(2)在各自页面编写该JS函数
Tomcat下:
function update_status(refreshUrl,table,column1,column2,value){
if( table==null || table=='' ){
alert("上报数据失败,请联系系统管理员");
return;
}
if( refreshUrl==null || refreshUrl==''){
alert("刷新url为空,请联系系统管理员");
return;
}
if( confirm('确认上报吗?') ){
window.location.href = "updateusejs.jsp?refreshUrl="
+refreshUrl+"&table="+table+"&column1="+column1+"&column2="+column2+"&value="+value;
}
}
Websphere下:
function update_status(refreshUrl,table,column1,column2,value){
if( table==null || table=='' ){
alert("上报数据失败,请联系系统管理员");
return;
}
if( refreshUrl==null || refreshUrl==''){
alert("刷新url为空,请联系系统管理员");
return;
}
if( confirm('确认上报吗?') ){
window.location.href = "/newmodules/pages/reportJsp/updateusejs.jsp?refreshUrl="
+refreshUrl+"&table="+table+"&column1="+column1+"&column2="+column2+"&value="+value;
}
}
//其实这个JS函数还可以增加一个参数 就是标记位Flag的值 这样在处理的JS函数中就不用写死这个值 更加的灵活
(3)编写共同的处理函数updateusejs.jsp【和XxxList.jsp放在同一个层级】
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page import="java.io.*"%>
<%@ page import="java.net.*"%>
<%@ page import="java.util.*"%>
<%@ page import="javax.servlet.*"%>
<%@ page import="javax.servlet.http.*"%>
<%@ page import="javax.naming.*,java.sql.*" %>
<%@ page import="com.runqian.report4.usermodel.*"%>
<%
//获取各参数值
String tableName1=request.getParameter("table");
String colmn1=request.getParameter("column1");
String colmn2=request.getParameter("column2");
String value1=(String)request.getParameter("value");
String refreshUrl = request.getParameter("refreshUrl");
Connection con = null;
Statement stmt = null;
try{
//获取context对象
com.runqian.report4.usermodel.Context ct = new com.runqian.report4.usermodel.Context();
con = ct.getConnectionFactory( ct.getDefDataSourceName() ).getConnection();
stmt = con.createStatement();
if((tableName1!=null || tableName1!="") && (colmn1!=null || colmn1!="" )&& (colmn2!=null || colmn2!="" ) && ( value1!=null || value1!="") ){
//定义更新sql语句
String sql= "update "+tableName1+" set "+colmn1+" ='unable' where "+colmn2+" = "+value1;
//执行sql语句
stmt.executeUpdate(sql);
}
//提交
con.commit();
//重定向url
response.sendRedirect(refreshUrl);
}catch(Exception e){
e.printStackTrace();
}finally{
//关闭流
if( stmt != null ) stmt.close();
if( con != null ) con.close();
}
%>
(4)设置表达式
在需要动态控制的"修改","删除"等单元格写控制表达式
if(B3==null || ds1.FLAG=="unable","","修改")
if(B3==null || ds1.FLAG=="unable","","删除")
含义:若B3单元格为空【项目名称为空】或者标记为unable,不显示链接入口
逻辑或:两者满足其一
1)项目名称为空时不显示链接
2)标记位为unable时不显示连接
3)项目名称为空且标记位为unable时不显示链接
(管理员)下达功能实现步骤:
(0)使用未实现上报的raq文件,复制一份 把名字改为XxxManager.raq和XxxManager.jsp
在raq文件的删除和下达的功能中,要把超链接改为XxxManage.jsp相关
在jsp文件中,要把相应的raq文件和下达的jsp改为和Manage相关的【删除的处理页面不用改,只需要把刷新的路径修改即可】
(1)在下达单元格编写超链接如下【tomcat和Websphere下都一样】【变化:刷新页面改为XxxManage.jsp】
"javascript:update_status('econrespManage.jsp','ECONRESP','FLAG','UUID','"+A3+"')"
"javascript:update_status('enterpriseManage.jsp','ENTERPRISE','FLAG','UUID','"+A3+"')"
"javascript:update_status('financeManage.jsp','FINANCE','FLAG','UUID','"+A3+"')"
"javascript:update_status('socialSecurityManage.jsp','SOCIALSECURITY','FLAG','UUID','"+A3+"')"
注意:删除页面的raq也要做相应的修改,把超链接中刷新的页面改为XxxManage.jsp 【 管理员和普通用户返回的列表页面是不一样的 】
(2)在各自页面编写该JS函数【变化:复制updateusejs.jsp页面,改名为updateusejsManage.jsp】
Tomcat下:
function update_status(refreshUrl,table,column1,column2,value){
if( table==null || table=='' ){
alert("下达数据失败,请联系系统管理员");
return;
}
if( refreshUrl==null || refreshUrl==''){
alert("刷新url为空,请联系系统管理员");
return;
}
if( confirm('确认下达吗?') ){
window.location.href = "updateusejsManage.jsp?refreshUrl="
+refreshUrl+"&table="+table+"&column1="+column1+"&column2="+column2+"&value="+value;
}
}
Websphere下:
window.location.href = "/newmodules/pages/reportJsp/updateusejsManage.jsp?refreshUrl="
+refreshUrl+"&table="+table+"&column1="+column1+"&column2="+column2+"&value="+value;
(3)编写共同的处理函数updateusejsManage.jsp【和XxxManager.jsp放在同一个层级】
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page import="java.io.*"%>
<%@ page import="java.net.*"%>
<%@ page import="java.util.*"%>
<%@ page import="javax.servlet.*"%>
<%@ page import="javax.servlet.http.*"%>
<%@ page import="javax.naming.*,java.sql.*" %>
<%@ page import="com.runqian.report4.usermodel.*"%>
<%
//获取各参数值
String tableName1=request.getParameter("table");
String colmn1=request.getParameter("column1");
String colmn2=request.getParameter("column2");
String value1=(String)request.getParameter("value");
String refreshUrl = request.getParameter("refreshUrl");
Connection con = null;
Statement stmt = null;
try{
//获取context对象
com.runqian.report4.usermodel.Context ct = new com.runqian.report4.usermodel.Context();
con = ct.getConnectionFactory( ct.getDefDataSourceName() ).getConnection();
stmt = con.createStatement();
if((tableName1!=null || tableName1!="") && (colmn1!=null || colmn1!="" )&& (colmn2!=null || colmn2!="" ) && ( value1!=null || value1!="") ){
//定义更新sql语句
String sql= "update "+tableName1+" set "+colmn1+" ='able' where "+colmn2+" = "+value1;【注意,这里改为了able】
//执行sql语句
stmt.executeUpdate(sql);
}
//提交
con.commit();
//重定向url
response.sendRedirect(refreshUrl);
}catch(Exception e){
e.printStackTrace();
}finally{
//关闭流
if( stmt != null ) stmt.close();
if( con != null ) con.close();
}
%>
(4)不用设置控制表达式