核心企业

CORE ENTERPRISE
当前位置:网站首页>软件开发 > 正文内容

联合主键的单表维护解决方案

 

通常我们的结果页面都会设置一个复选框,当用户选择某条记录时,把该条记录的主键提交到后台展现逻辑。如下: <TD align="center"> <logic:present id="ResultSet" property="BNDICT_T_Dictionary/businTypeID"> <html:checkbox styleId="checkall" name="list[@name="update"]/BNDICT_T_Dictionary/businTypeID" id="ResultSet" property="BNDICT_T_Dictionary/businTypeID" indexed="true" /> </logic:present> </TD>

       但是有些表是联合主键,如BNDICT_T_Dictionary表,另一个主键是businID,是不是可以再加一个复选框来提交另一个主键值呢?如下:

<TD align="center"> <logic:present id="ResultSet" property="BNDICT_T_Dictionary/businTypeID"> <html:checkbox styleId="checkall" onclick="checkOther("checkall","checktwo")" name="list[@name="update"]/BNDICT_T_Dictionary/businTypeID" id="ResultSet" property="BNDICT_T_Dictionary/businTypeID" indexed="true" />  </logic:present> <logic:present id="ResultSet" property="BNDICT_T_Dictionary/businID"> <html:checkbox styleId="checktwo" style="width:0px;" name="list[@name="update"]/BNDICT_T_Dictionary/businID" id="ResultSet" property="BNDICT_T_Dictionary/businID" indexed="true" /> </logic:present> </TD> 为了在页面上只显示一个复选框,所以我们将第二个复选框的宽度设为0px使其隐藏,当用户选中某条记录前的复选框时,我们通过JS函数使这条记录对应的隐藏的复选框也选中,同样当用户取消选中时,也同样使隐藏的复选框取消选中。需要在页面中增加如下JS函数。     function checkOther(checkall,checktwo){     var checkall = document.getElementsByName(checkall);         var checktwo = document.getElementsByName(checktwo);                     for(var i=0;i<checkall.length;i++)         {             if(checkall[i].checked == true){                 checktwo[i].checked = true;                        }else if(checkall[i].checked == false){                 checktwo[i].checked = false;                           }         }     }        另外我们还要重构全选函数checkAll(),并修改全选框的onclick属性值。 <TD align="center"> <logic:notEqual property="list[@type="BNDICT_T_Dictionary"]/@rowNum" value="0"> <html:checkbox name="chkAll" onclick="checkAll("checkall","checktwo")"/> </logic:notEqual>选择</TD>  
function checkAll(checkall,checktwo)     {         var checkall = document.getElementsByName(checkall);         var checktwo = document.getElementsByName(checktwo);               var ck = window.event.srcElement;             if(ck.checked==true)         {             for(var i=0;i<checkall.length;i++)             {                 checkall[i].checked = true;                 checktwo[i].checked = true;                        }                   }else{             for(var i=0;i<checkall.length;i++)             {                 checkall[i].checked = false;                 checktwo[i].checked = false;                           }                   }     }      通过传入后台的XML总线上的数据,可以看出两个主键的ID都传到了后台,下面只要在展现逻辑中增加一个数据设置即可 为了保证程序的绝对安全,在修改、删除之前要判断所有主键是否都有值。 另外新增时不能使用主键自动获取。 还有一个好处是,这种页面上的JS操作可以写进项目模板中,从而实现对联合主键的单表维护向导,但前提是属性生成向导中要支持选择多个主键才行。    
新疆快3