此分页问题原先没考虑完整,导致模块内部之间和模块与模块之间的分页不独立,例如当页面上存在两个数据模块时,点击上一个模块的分页图标,下一个模块会跟随着变化;当同一个模块进行重新配置得到数据时,分页也会与上一次的数据配置有关联。目前已经解决此问题,关键还是各个模块moduleid的传参问题,还有就有设置初始化函数才能使各个模块的分页进行顺利。
最初显示数据时,先点了模块表头,该模块的moduleid就能够通过全局变量得到了,第一次的数据显示时所需要的参数可能过记录下拉列表中的值传递。当点击分页图标时,需要将showpage的值加一,并且作为参数传入显示数据的jsp页面,先说一下showpge值的获取:原先采用的是将showpage作为一个全局变量来传递,显然会出现问题。现在是将showpage的值放在一个hidden中,每次作为参数传过去后,jsp页面上将其记录到hidden的value值中,每次将showpage加一时,先从hidden中获取一下,进行加一操作,然后再将加一后的值赋给hidden的value值。实现代码如下:
function showupbasepage(moduleid){
var strNum=document.getElementById(moduleid + "showpage").value; //从jsp页面中获取showpage的值
var num=parseInt(strNum); //由于获取的是字符串格式,要进行加减一 操作首先要转换成数值格式
num=num-1;
var dd=num.toString();//再将数值类型转换成字符串格式,再次赋值给hidden的value属性。
document.getElementById(moduleid + "showpage").value=dd;
alert("重新值:"+document.getElementById(moduleid + "showpage").value);
showbasedata(moduleid);
}
function showdownbasepage(moduleid){
var strNum=document.getElementById(moduleid + "showpage").value;
var num=parseInt(strNum);
num=num+1;
var dd=num.toString();
document.getElementById(moduleid + "showpage").value=dd;
showbasedata(moduleid);
}
将分页的showpage获得后就要重新调用显示数据的函数,此时必须要传带参数的showbasedata();因为多个模块显示时,当进行下一页操作时,必须保证它操作的是本身模块的分页,这样把moduleid作为参数传入就行了。注意:第一次调用函数是不带参数的,而当分页操作时再次调用该函数就得加参数,这样的话,该函数就必须进行一次参数个数的判断。
function showbasedata()
{
var moduleid ="";
var databasename ="";
var databaseinstance ="";
var tablename = "";
var columns ="";
var showpage= "";
var hidden=document.getElementById("globalhidden");
if(arguments.length == 0)//参数为0,即将第一次显示数据时传递的参数的获取方法如下
{
moduleid=hidden.name;
databaseinstance=hidden.value;
var databasenameobj=document.getElementById("choose_database_name");
for(var i=0;i<databasenameobj.options.length;i++)
if(databasenameobj[i].selected){
databasename=databasenameobj[i].value;
break;
}
var tablenameobj=document.getElementById("choose_table_name");
for(var i=0;i<tablenameobj.options.length;i++)
if(tablenameobj[i].selected){
tablename=tablenameobj[i].value;
break;
}
var columnsobj=document.getElementById("choose_columns_name");
for(var i=0;i<columnsobj.options.length;i++)
{
if(columnsobj.options[i].selected)
{
columns+=columnsobj.options[i].value;
columns+=",";
}
}
}
else
{
moduleid= arguments[0];//将分页后调用的时候传递参数moduleid,参数的获取是通过当前页面的的hidden的value属性值获取的
databaseinstance = document.getElementById(moduleid+"databaseinstance").value
databasename = document.getElementById(moduleid+"databasename").value
tablename = document.getElementById(moduleid+"tablename").value
columns = document.getElementById( moduleid+"columns").value;
}
createXMLHttpRequestre_data();
xmlHttpre_data.onreadystatechange = new Function("handleStateChangere_data(" + moduleid +")");
}
//下面是showpage的获取方法,当第一次显示数据时,将其值设为1传递给jsp页面。当分页时是通过读取hidden的value值得到的。
var showpageobj = document.getElementById(moduleid + "showpage");
if(showpageobj)
{
showpage = document.getElementById(moduleid + "showpage").value;
}
else
{
showpage=1;
}
xmlHttpre_data.open("POST",applicationRoot+"datapage.jsp",true);
xmlHttpre_data.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlHttpre_data.send("moduleid="+moduleid+"&databaseinstance="+databaseinstance+"&databasename="+databasename+"&tablename="+tablename+"&columns="+columns+"&showpage="+showpage);
}
function handleStateChangere_data()
{
if(xmlHttpre_data.readyState==4)
{
if(xmlHttpre_data.status==200)//当从jsp页面传过的的数据显示时,也要通过参数区分下,否则数据模块的显示位置会不准确。
var moduleid;
if(arguments.length == 0)
{
var hidden=document.getElementById("globalhidden");
moduleid=hidden.name;
}
else
{
moduleid= arguments[0]; //在相应的自身模块位置显示数据。
}
document.getElementById(moduleid).innerHTML= xmlHttpre_data.responseText;
var filtercol = document.getElementById("filtercol");
var arraystr = document.getElementById( moduleid + "columns").value.split(",");
filtercol.options.length = 0;
for ( i = 0 ; i < arraystr.length-1 ; i ++ )
{
filtercol.add(new Option(arraystr[i],arraystr[i]));
}
}
else{alert("dpwrong wrong");}
}
}
上面实现的是通过下拉单选择形式获取的数据模块情况,还有一种获取是用户自己通过输入sql语句来显示数据库中的数据。参数的获取是通过读取控件的value值获得的。
function inputsql(){
var moduleid;
var hidden=document.getElementById("globalhidden");
if(arguments.length == 0)
{
moduleid=hidden.name;
}
else
{
moduleid= arguments[0];
}
alert(moduleid);
createXMLHttpRequest_sql();
xmlHttp_sql.onreadystatechange=new Function("handleStateChange_sql(" + moduleid +")");
var databaseinstance=hidden.value;
var databasenameobj=document.getElementById("choose_sqldatabase_name");
var databaseobj = document.getElementById(moduleid + "databasename");
var databasename ;
if(databaseobj)
{
databasename = document.getElementById(moduleid + "databasename").value;
}
else
{
for(var i=0;i<databasenameobj.options.length;i++)
if(databasenameobj[i].selected){
databasename=databasenameobj[i].value;
break;
}
}
var sqlobj = document.getElementById(moduleid + "datasql");
var sql;
if(sqlobj)
{
sql = document.getElementById(moduleid + "datasql").value;
}
else
{
sql=document.getElementById("sqlinput").value;
}
var showpageobj = document.getElementById(moduleid + "showpage");
if(showpageobj)
{
var showpage = document.getElementById(moduleid + "showpage").value;
}
else
{
var showpage=1;
}
xmlHttp_sql.open("POST",applicationRoot+"sqlinput2.jsp",true);
xmlHttp_sql.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlHttp_sql.send("moduleid="+moduleid+"&databaseinstance="+databaseinstance+"&databasename="+databasename+"&sql="+sql+"&showpage="+showpage);
}
function handleStateChange_sql(){
if(xmlHttp_sql.readyState==4){//请求完成
alert("ok");
if(xmlHttp_sql.status==200){
if("SQL语法错误,请检查!" == xmlHttp_sql.responseText.trim() || "SQL执行错误,请检查!" == xmlHttp_sql.responseText.trim())
{
alert(xmlHttp_sql.responseText.trim());
}
else
{ var moduleid;
if(arguments.length == 0)
{
var hidden=document.getElementById("globalhidden");
moduleid=hidden.name;
}
else
{
moduleid= arguments[0];
}
document.getElementById(moduleid).innerHTML=xmlHttp_sql.responseText;
alert(xmlHttp_sql.responseText);
var filtercol = document.getElementById("filtercol");
var colu = document.getElementById( moduleid+"columns").value;
var arraystr = document.getElementById( moduleid+"columns").value.split(",") ;
filtercol.options.length = 0;
for ( i = 0 ; i < arraystr.length -1 ; i ++ )
{
filtercol.add(new Option(arraystr[i],arraystr[i]));
}
}
}
else{
alert("errorerror");
}
}
}
浙公网安备 33010602011771号