zoukankan      html  css  js  c++  java
  • 自定义表单数据信息生成

    信息分成三类:数据源、控件、绑定信息
    {XX}表示要被实际值替换的部分。
    数据源:用Hidden,Name=DS${ID}${Updatable},value={SQL}${Keys}$~{kv1},{kv2},...~{kv3},{kv4}
    控件:NAME={ID},value={value}
    控件附加属性:NAME=PRO${ControlID},Value={P1$P2$P3}
    绑定信息:每个绑定控件生成一个,用Hidden,Name=DB${ControlID}${Ind}${DS},Value={DF}${dataType}
    DS$为数据源ID的固定开头,DB$为绑定ID的固定的开头,用于识别。
    {ID}表示本控件的ID值,{SQL}表示数据源的SQL值,{Keys}表示数据源Keys值,{kvx}表示对应的Key的数据。
    {value}表示控件的值。
    {ControlID}表示绑定信息对应的Control的ID值,{DS}表示对应的数据源,{DF}表示对应的数据字段,{Ind}表示对应的行索引,{dataType}表示对应字段的数据类型。


      保存时的处理:
    1.把request.form中的数据分到三个hashtable中,htDataSource存Name以"DS$"以开头"$1"结尾的的key和Value,htDataBind存Name以"DB$"开头的key和Value,htControl存剩下的key和Value。
    2.处理htDataSource中的每个元素的SQL,用正则得到其TableName,其keys和KeysValues,以htDataSource的键为键,TableName和(keys,KeysValues结构数组)构成的结构,生成名为htTable的hashtable。
    3.处理htTable中的每一个元素eleA:
           3.1对eleA.key,查找Value中{DS}为eleA.Key的{ID}的元素eleB,得到eleB.DF和eleB.Ind;根据eleB.Key的{ControlID}得到htControl中的元素eleC,得到eleC.Value 。
           3.2如果eleB.Ind>eleA.Value.KeysValues.Count,则生成Insert语句:组合所有的eleB.DF和eleC.Value,加上eleA.TableName生成Insert;否则,生成Update语句,组合所有的eleB.DF和eleC.Value生成Set子句,eleC.Keys及eleC.KeysValues(ind)生成Where子句,加上eleA.TableName生成Update XXX set XXX Where XXX。
  • 相关阅读:
    CentOS 7 如何设置默认启动方式为命令行模式
    Virtual Box配置CentOS7网络
    序列化后成对象转map,再添加到dataList
    centos7 ping: www.baidu.com: Name or service not known
    协议1
    idea查看接口方法实现
    centos关闭防火墙
    myeclipse配置svn
    eas固定ip避免多次申请许可
    jvm配置
  • 原文地址:https://www.cnblogs.com/Render/p/390196.html
Copyright © 2011-2022 走看看