zoukankan      html  css  js  c++  java
  • ssm redis 数据字典在J2EE中的多种应用与实现

    数据字典在项目中是不可缺少的“基础设施”,关于数据字典如何设计如何实现,今天抽空讲一下吧

    先看一下表设计:

    通过自定义标签来实现页面的渲染:

    public class DataDictValueTag extends SimpleTagSupport {
    
        private String typeCode;
    
        private String ddKey;
        
        StringWriter sw = new StringWriter();
        
        public void doTag() throws JspException, IOException {
            if (StringUtils.isNotEmpty(typeCode) && StringUtils.isNotEmpty(ddKey)) {
                
                DataDictService ddService = (DataDictService)SpringContextUtil.getBean(DataDictService.class);
                String ddValue = ddService.queryDataDictValueByCodeKey(typeCode, ddKey);
                
                JspWriter out = getJspContext().getOut();
                out.println(ddValue);
            } else {
                getJspBody().invoke(sw);
                getJspContext().getOut().println(sw.toString());
            }
        }
    
        public String getTypeCode() {
            return typeCode;
        }
    
        public void setTypeCode(String typeCode) {
            this.typeCode = typeCode;
        }
    
        public String getDdKey() {
            return ddKey;
        }
    
        public void setDdKey(String ddKey) {
            this.ddKey = ddKey;
        }
    
    }

    再看一下service,根据字典码和数据字典key来获取具体的值:

    需要注意的是数据字典属于静态数据,要放到redis中

    @Override
        public String queryDataDictValueByCodeKey(String typeCode, String ddKey) {
            String redisKey = "redis_datadict:" + typeCode + ":" + ddKey;
            // 从缓存中获取数据字典的值,如果没有该值,则从数据库中获取,最后再存入redis中
            String redisDdvalue = jedis.get(redisKey);
            if (StringUtils.isNotEmpty(redisDdvalue)) {
                return redisDdvalue;
            }
            
            DataDictExample dataDictExample = new DataDictExample();
            Criteria dataDictCriteria = dataDictExample.createCriteria();
            dataDictCriteria.andTypeCodeEqualTo(typeCode);
            dataDictCriteria.andDdkeyEqualTo(ddKey);
            dataDictCriteria.andIsShowEqualTo(YesOrNo.YES.value);
            List<DataDict> list = dataDictMapper.selectByExample(dataDictExample);
            if (list != null && list.size() > 0) {
                DataDict dd = (DataDict)list.get(0);
                
                String ddvalue = dd.getDdvalue();
                // 在Redis中设置数据字典的值
                jedis.set(redisKey, ddvalue);
                
                return ddvalue;
            }
            
            return "";
        }

    再JSP中的使用:

    <label>
                                                    <input type="radio" name="sex" class="icheck" value="0" /> <dataDict:dataDictValue typeCode="sex" ddKey="0"/>
                                                </label>
                                                
                                                <label>
                                                    <input type="radio" name="sex" class="icheck" value="1" /> <dataDict:dataDictValue typeCode="sex" ddKey="1"/>
                                                </label>
                                                 
                                                <label>
                                                    <input type="radio" name="sex" class="icheck" value="2" checked="checked"/> <dataDict:dataDictValue typeCode="sex" ddKey="2"/>
                                                </label>

    如果是用jqgrid类似这样的js插件来渲染的话,那么需要再额外自定义api接口供js或者其他应用调用:

    { name: 'sex', index: 'sex',  20, sortable: false,
                        formatter:function(cellvalue, options, rowObject) {
                            
                            var typeCode = "sex";
                            var ddkey = cellvalue;
                            var ddvalue = "";
                            
                            $.ajax({
                                url: $("#hdnContextPath").val() + "/dataDict/queryDataDictValue.action",
                                type: "POST",
                                async: false,
                                data: {"typeCode": typeCode, "ddkey": ddkey},
                                success: function(data) {
                                    if(data.status == 200 && data.msg == "OK") {
                                        ddvalue = data.data;
                                    } else {
                                        console.log(JSON.stringify(data));
                                    }
                                },
                                error: function (response, ajaxOptions, thrownError) {
                                    Error.displayError(response, ajaxOptions, thrownError);                
                                }
                            });
                            
                            return ddvalue}  
                    },

    基本上就是这些用法了,具体我录制了一些视频,代码也上传到了github
    http://www.itzixi.com/course/detail.shtml?courseId=17092078Y3009WX4

    https://github.com/leechenxiang/LeeCX

  • 相关阅读:
    Linux启动新进程的几种方法及比较[转]
    部署WEB应用的三种方式[转]
    HTML form label
    其他对象的表单
    Input对象2(貌似是独立标签)
    通过表单展示不一样的页面(input对象)
    神奇的表单
    有效地管理页面布局
    css新奇技术及其未来发展
    进一步讨论页面布局的方法
  • 原文地址:https://www.cnblogs.com/leechenxiang/p/7590604.html
Copyright © 2011-2022 走看看