数据字典的设计--5.数据的保存

Posted 一只笨笨鸟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据字典的设计--5.数据的保存相关的知识,希望对你有一定的参考价值。

  保存分为两种:

1.没有选择类型列表,添加新的类型名称,此时保存表示新增一种数据类型:

 

2.选择下拉框中数据类型,类型名称不可见,此时保存表示在已有的数据类型上进行编辑和修改:

  其中,类型名称可见与否是通过js代码实现的:

 

实现步骤


 

1.在dictionaryIndex.jsp中添加saveDict()

  当点击【保存】时,执行以下代码:  

function saveDict(){
          
          if(document.Form1.keyword.value=="jerrynew"){
              if(Trim(document.Form1.keywordname.value)==""){
                 alert("请输入类型名称");
                 return false;
              }
              
             var allkeywords= document.Form1.keyword;
             for(var i=0;i<allkeywords.length;i++){
        
                if(allkeywords[i].value==Trim(document.Form1.keywordname.value)){           

                   alert("已存在此类型名称,请重新输入");
                   return false;
                 }
                 
             }
             //设置标志符“new”表示新增一种数据类型
              document.Form2.keywordname.value=document.Form1.keywordname.value;
              document.Form2.typeflag.value="new";
              
          }else{
            //设置标识符“add”表示在已有的数据类型上进行编辑和修改
              document.Form2.keywordname.value=document.Form1.keyword.value;
              document.Form2.typeflag.value="add";    
          }
          var tbl=document.getElementById("dictTbl");
          for (i=1;i<tbl.rows.length;i++){   
                     var name = tbl.rows[i].cells[1].getElementsByTagName("input")[0].value;
                     if(Trim(name)==""){
                         alert("名称不能为空!");
                         
                         return false;
                     }
             }
             for(k=1;k<=tbl.rows.length-2;k++)
          {
               for(m=k+1;m<=tbl.rows.length-1;m++)
               {     
                    var name1 = tbl.rows[k].cells[1].getElementsByTagName("input")[0].value;
                    var name2 = tbl.rows[m].cells[1].getElementsByTagName("input")[0].value;
                    if(name1 == name2){
                        alert("名称不能相同!"); 
                         return false;
                }    
            }
          }
          document.Form2.action="${pageContext.request.contextPath }/system/elecSystemDDLAction_save.do";
          document.Form2.submit();     
    }  

  作用:1.判断输入类型名称是否为空,是否与数据库已有的类型名称重复;

     2.判断表单中内容是否为空,是否有重复

  其中定义keywordname和typeflag为隐藏输入字段:

<input type="hidden" name="keywordname" >
<input type="hidden" name="typeflag" >

2.在ElecSystemDDL中增加:

/**非持久化javabean的属性*/
    //数据类型
    private String keywordname;
    /**
     * 用来判断执行到业务标识
     * add:此时【保存】表示在已有的类型上进行编辑和修改
     * new:此时【保存】表示新增一种数据类型
     */
    private String typeflag;
    
    //数据项的值,数组
    private String [] itemname;

    public String getKeywordname() {
        return keywordname;
    }

    public void setKeywordname(String keywordname) {
        this.keywordname = keywordname;
    }

    public String getTypeflag() {
        return typeflag;
    }

 

3.在ElecSystemDDLAction中增加save()方法:

/**  
    * @Name: save
    * @Description: 保存表单数据到数据库
    * @Parameters: 无
    * @Return: String:重定向到system/dictionaryIndex.jsp再查询
    */
    public String save(){
        elecSystemDDLService.saveSystemDDL(elecSystemDDL);
        return "save";
    }

4.修改struts.xml:

<!-- 数据字典 -->
<action name="elecSystemDDLAction_*" class="elecSystemDDLAction" method="{1}">
      <result name="home">/WEB-INF/page/system/dictionaryIndex.jsp</result>
       <result name="edit">/WEB-INF/page/system/dictionaryEdit.jsp</result>
       <result name="save" type="redirectAction">
              <param name="actionName">elecSystemDDLAction_home.do</param>
       </result>
 </action>

5.IElecSystemDDLService中添加方法的声明

void saveSystemDDL(ElecSystemDDL elecSystemDDL);

6.实现类ElecSystemDDLServiceImpl中重写:

/**  
    * @Name: saveSystemDDL
    * @Description: 保存数据到数据字典
    * @Parameters: ElecSystemDDL:VO对象
    * @Return: 无
    */
    @Override
    @Transactional(isolation=Isolation.DEFAULT,propagation=Propagation.REQUIRED,readOnly=false)
    public void saveSystemDDL(ElecSystemDDL elecSystemDDL) {
        //1:获取页面传递的参数
        //数据名称
        String keyword = elecSystemDDL.getKeywordname();
        //标识符
        String typeflag = elecSystemDDL.getTypeflag();
        //数据项的值
        String[] itemname = elecSystemDDL.getItemname();
        //2:获取判断业务逻辑的标识(new和add)
        //如果typeflag==new:新增一种新的数据类型
        if("new".equals(typeflag)){
            //* 遍历页面传递过来的数据项的名称,组织PO对象,执行保存
            this.saveDDL(keyword,itemname);
        }
        //如果typeflag==add:在已有的数据类型基础上进行编辑和修改
        else{
            //* 使用数据类型,查询该数据类型对应的list,删除list
            List<ElecSystemDDL> list = this.findSystemDDLListByKeyword(keyword);
            elecSystemDDLDao.deleteObjectByCollection(list);
            //* 遍历页面传递过来的数据项的名称,组织PO对象,执行保存
            this.saveDDL(keyword,itemname);
        }          
}

    private void saveDDL(String keyword, String[] itemname) {
        if(itemname!=null&&itemname.length>0){
            //* 遍历页面传递过来的数据项的名称,组织PO对象,执行保存
            for(int i=0;i<itemname.length;i++){
                ElecSystemDDL systemDDL = new ElecSystemDDL();
                systemDDL.setDdlCode(i+1);
                systemDDL.setDdlName(itemname[i]);
                systemDDL.setKeyword(keyword);
                elecSystemDDLDao.save(systemDDL);
            }    
        }
}

 

 

 

以上是关于数据字典的设计--5.数据的保存的主要内容,如果未能解决你的问题,请参考以下文章

数据字典的设计--1.首页功能实现

从单个按钮从多个片段中提取数据

Redis设计与实现-持久化篇

将字典保存为 pyspark 数据框并加载它 - Python、Databricks

当我从用户获取数据并将其保存到 SQLite 数据库中时,我应该怎么做才能使列表视图在片段中工作

检索数据未出现在 ListView 的片段中