从数据库的两种表中取出来的数据进行比较。从而在页面进行展示。如果一样的进行选中(打勾),不一样的不选中(打勾)
JSP页面代码如下:有checkbox.等从数据库进行查询出来的。
<tr> <td colspan="6" width="100%"> <table border="2" width="100%"> <tr class="center"> <th width="20%" class="center"> 全选/反选<input type="checkbox" name="all" οnclick="ckeckAll(this);"> </th> <th width="20%" class="center"> 箱主 </th> <th width="20%" class="center"> 箱号 </th> <th width="20%" class="center"> 箱型 </th> <th width="20%" class="center"> 箱类 </th> </tr> <tbody id="listTable"> <logic:iterate id="ylxhlist" name="lssqdListForm" property="ylxhlist" indexId="index"> <% int i=index.intValue(); %> <tr> <th width="20%" class="center"> <html:checkbox property="checkbox1" name="ylxhlist" value="true" indexed="true"/> <html:hidden name="ylxhlist" property="id" indexed="true" /> <html:hidden name="ylxhlist" property="zbid" indexed="true" /> <html:hidden name="ylxhlist" property="xxdm" indexed="true" /> <html:hidden name="ylxhlist" property="xldm" indexed="true" /> <html:hidden name="ylxhlist" property="ztmc" indexed="true" /> <html:hidden name="ylxhlist" property="ztid" indexed="true" /> </th> <td width="20%" class="center"> <bean:write name="ylxhlist" property="xzdm" /> <html:hidden name="ylxhlist" property="xzdm" indexed="true" /> </td> <td width="20%" class="center"> <bean:write name="ylxhlist" property="xhdm" /> <html:hidden name="ylxhlist" property="xhdm" indexed="true" /> </td> <td width="20%" class="center"> <bean:write name="ylxhlist" property="xxmc" /> <html:hidden name="ylxhlist" property="xxmc" indexed="true" /> </td> <td width="20%" class="center"> <bean:write name="ylxhlist" property="xlmc" /> <html:hidden name="ylxhlist" property="xlmc" indexed="true" /> </td> </tr> </logic:iterate> </tbody> </table> </td> </tr>
这个页面要显示的是从数据库中查询出来要比较的那个比较大的集合。
怎么要让他选中呢!通过在po中构造一个属性checkbox1。从而在action中取出来小的集合,也就是数据进行比较的
以下代码javascript方法。调用的更新的方法。
//更新方法 function updatea() { var obj = document.getElementById("listTable"); var checkCount = 0; for(var i=0;i<obj.rows.length;i++){ var oTr = obj.children[i]; var oCheckbox = oTr.children[0].children[0]; if(oCheckbox.checked){ checkCount++; } } if(checkCount==0){ alert("请至少选择一条提箱单记录!"); return false; } document.forms[0].operFlag.value= "update"; if(check()){ if(confirm("你确定要保存吗!!")){ document.forms[0].submit(); } } }
在在PO中构造一个属性。用来控制是否选中,选中的话给他一个值=true,未选中的话给他一个值false。
public class KhtxdxhxbPO extends com.cvicse.crimt.zbx.yxsp.vo.base.BaseKhtxdxhxbPO { //页面checkbox框 private String checkbox1 = ""; public String getCheckbox1() { return checkbox1; } public void setCheckbox1(String checkbox1) { this.checkbox1 = checkbox1; } /** * 构造函数 */ public KhtxdxhxbPO() { this.init(); } /** * 初始化函数,首先调用父类的初始化函数 */ public void init() { super.init(); } }
以下是页面显示forupdate的方法。也就是准备更新的的方法。部分代码如下:
/** * 本方法是对页面的checkbox进行判断, * 将页面取出来的数据(checkbox1)进行判断进行的是TRUE false 判断 * 将大的list 取出来进行读取。 * khtxdxhxbPO :为提箱单箱号系表中的PO也就是比较大的集合 * baseKhyxsqdxhxbPO :为申请单箱号系表中的数据。比较小的数据集合。 * xhdmStr 为定义的一个属性,khtxdxhxbPO.getXzdm() + khtxdxhxbPO.getXhdm(); * 后面的两个属性为得到的这两个集合要进行比较的属性。 * xhdmNStr:为小的集合中要进行比较的两个属性 两个属性加起来进行比较 * if else 进行判断。假如假如两个值相等的话,下一步: * khtxdxhxbPO.setCheckbox1("true"); 将PO中属性checkbox1进行设值。 * true的话选择了选中的按钮。 * 假如是true的话意思,就是你选择了你所要选择的箱号信息。 * true的话还要进行brreak;如果不进行break的话如果为false的时候,不能设置为ttue * 这样的时候只有组后一个为true的话才可以进行判断. * 只要break的时候,才可以进行判断 * 注解: 此方法为zhao_yang 缩写。 * */ for (int i = 0; i < ylxhlist.size(); i++) { KhtxdxhxbPO khtxdxhxbPO = (KhtxdxhxbPO) ylxhlist.get(i); String xhdmStr = khtxdxhxbPO.getXzdm() + khtxdxhxbPO.getXhdm(); String xhdmNStr = ""; for (int j = 0; j < xhlist.size(); j++) { BaseKhyxsqdxhxbPO baseKhyxsqdxhxbPO = (BaseKhyxsqdxhxbPO) xhlist .get(j); xhdmNStr = baseKhyxsqdxhxbPO.getXzdm() + baseKhyxsqdxhxbPO.getXhdm(); if (xhdmStr.equals(xhdmNStr)) { khtxdxhxbPO.setCheckbox1("true"); break; } else { khtxdxhxbPO.setCheckbox1("false"); } } }
这样以供页面进行显示的时候就可以进行判断出是选中还是未选中了。
选中的话还要对其进行校验。至少要选中checkbox中的一条记录。Javascript进行的校验。
//更新方法 function updatea() { var obj = document.getElementById("listTable"); var checkCount = 0; for(var i=0;i<obj.rows.length;i++){ var oTr = obj.children[i]; var oCheckbox = oTr.children[0].children[0]; if(oCheckbox.checked){ checkCount++; } } if(checkCount==0){ alert("请至少选择一条提箱单记录!"); return false; } document.forms[0].operFlag.value= "update"; if(check()){ if(confirm("你确定要保存吗!!")){ document.forms[0].submit(); } } }
以下方法 是校验的是计算的参考费用。参考费用要大于用箱费用。的校验。还有上面选择的箱型和下面选中的箱号信息必须
一致。例如上面选择了三个。下面选中的箱号信息就必须要选择三个。代码的校验如下:
/计算参考费用。 function ckfy(){ with (document.forms[0]) { var flag=0; /*校验发站代码*/ if(fztm.value=="" || fztm.value==0 ){ return false; } /*校验到站代码*/ if(dztm.value=="" || dztm.value==0){ return false; } /*校验申请箱数*/ for (i = 0; i < document.all("xxlist").childNodes.length; i++) { xs = document.getElementById("sqxs_" + i + "_").value; yxf = document.getElementById("yxf_" + i + "_").value; if (xs == 0) { flag+=1; document.getElementById("ckfy_"+i+"_").value="0.0" document.getElementById("yxf_"+i+"_").value="0.0"; } } if(flag==document.all("xxlist").childNodes.length){ alert("请至少输入一种箱型的箱数及用箱费!"); return false; } /*拼写查询条件queryStr字符串*/ var oTable = document.all("xxlist"); var queryStr = ""; for (i = 0; i < oTable.childNodes.length; i++) { var xs = document.getElementById("sqxs_" + i + "_").value; if(xs!=0){ queryStr+=fztm.value+"_"; queryStr+=dztm.value+"_"; var xldm = document.getElementById("xldm_" + i + "_").value; queryStr+=xldm+"_"; var xxdm = document.getElementById("xxdm_" + i + "_").value; queryStr+=xxdm+"_"; var xs = document.getElementById("sqxs_" + i + "_").value; queryStr+=xs+"#"; } } var data; data = {"ckfys":queryStr}; LssqdBO.getCkfyList(data, showMessage); function showMessage(msg){ var rs = new Array(); rs = msg; var table = ""; for(var k in rs){ var xldmxxdm = rs[k].xldm+rs[k].xxdm; var ckfy = rs[k].ckfy; for (i = 0; i < oTable.childNodes.length; i++) { var xldm = document.getElementById("xldm_" + i + "_").value; var xxdm = document.getElementById("xxdm_" + i + "_").value; var xlxxStr = xldm+xxdm; if(xldmxxdm==xlxxStr){ if(ckfy!=0){ document.getElementById("ckfy_"+i+"_").value = ckfy; }else{ document.getElementById("ckfy_"+i+"_").value = "无参考费用"; } } } } } return false; } }