需求:文章数据表(news)中,有一个字段,标示此文章是否显示。
文章类型是tinyint,其中的值,0表示不显示;1表示显示。
那么,在查询文章列表时,如果SQL不加额外的判断,如:
SELECT * FROM news
那么调取出来的文章列表中,是否显示这一列的值肯定就是0或者1。
这个只有这两个值,还容易看,如果还有值2代表审核中,3代表审核失败,那么列出的数据就不好分辨了。
解决方式:可以将0=不显示; 1=显示 这两个值在项目启动时,自动生成一个js缓存文件。在列出数据时,自动用js将显示的数字转化为文字描述
步骤:
项目在开启时,要自动生成js缓存文件,放于 /cache/js/ 文件夹下。
需要在你的项目下,建立一个文件夹 generateCache
在其中增加一个类ShowHidden
需要注意的是,要保证 generateCache 文件夹要在Spring的自动扫描范围内。因为项目开启后自动运行,会用到Spring的注解 :@Component,来表示这个类会在项目启动后自动执行一次,于是才能达到项目启动后自动生成js文件的目的。
需要在 /src/applicationContext.xml 中,开启这一段,让Spring能扫描到 com.ilanchuang.dabai2.generateCache 这个包下的类才行
ShowHidden.java 的源代码:
package com.ilanchuang.dabai2.generateCache; import org.springframework.stereotype.Component; /** * 演示示例:标注当前状态是显示或者隐藏 * @author 管雷鸣 */ @Component public class ShowHidden extends com.xnx3.j2ee.generateCache.BaseGenerate { //构造方法,运行类的时候会自动运行,从而生成js文件 public ShowHidden() { System.out.println("-----ShowHidden"); //英文翻译过来的意思便是,自动创建一个缓存对象,当然,这个方法的作用便是自动创建一个js对象,会自动生成js代码如: var showHidden = new Array(); super.createCacheObject("showHidden"); //以下两个则是为js 的 showHidden数组加入这两个值,可以理解为js的这个操作 showHidden['0'] = '隐藏'; super.cacheAdd("0", "隐藏"); super.cacheAdd("1", "显示"); //下面这句便是创建js缓存文件,至 /cache/js/ 目录下,名为 ShowHidden_showHidden.js 。其中这个js的文件名,也就是当前类的名字 加 super.createCacheObject()所传入的字符串的值 super.generateCacheFile(); } }
如此,项目启动后,可以到网站根目录下,进入 /cache/js/ 文件夹,找到 ShowHidden_showHidden.js
文本方式打开此文件,格式化后,可得到其js源代码:
var showHidden = new Array(); showHidden['0'] = '隐藏'; showHidden['1'] = '显示'; /*页面上输出选择框的所有option,显示到页面上*/ /** * 输出 标签,其中的值(标签),便是showHidden数组的值。 此默认 标签为非必填项 * selectValue 当前选中的option某项的值。若不填写为空字符串、或者跟中的option标签的值都不对应,则会不选中任何项 */ function writeSelectAllOptionForshowHidden(selectValue) { writeSelectAllOptionForshowHidden_(selectValue, '所有', false); } /** * 输出 标签,其中的值(标签),便是showHidden数组的值 * selectValue 当前选中的option某项的值。若不填写为空字符串、或者跟中的option标签的值都不对应,则会不选中任何项 * firstTitle 若是上面的参数selectValue为空字符串,那么这里便是默认选中的提示项,比如“请选择”,这个option="" 空字符串 * required 此标签是否为必填项,true:是必填项 ; false:非必填项 */ function writeSelectAllOptionForshowHidden_(selectValue, firstTitle, required) { var content = ""; if (selectValue == '') { content = content + '' + firstTitle + ''; } else { content = content + '' + firstTitle + ''; } for (var p in showHidden) { if (p == selectValue) { content = content + '' + showHidden[p] + ''; } else { content = content + '' + showHidden[p] + ''; } } document.write('' + content + ''); } //这个js变量的值不是固定的,可多可少。仅仅只是针对改动后,能让浏览器刷新缓存而做,无其他任何作用。 var xnx3_r1510195123 = '111111111111111111111111111111111111111111111111111';
新建一个SpringMVC 页面进行测试,view层(JSP)页面代码:
<%@page import="com.xnx3.j2ee.Global"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://www.xnx3.com/java_xnx3/xnx3_tld" prefix="x" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <jsp:include page="iw/common/head.jsp"> <jsp:param name="title" value="测试js数据缓存的快速使用"/> </jsp:include> <script src="<%=basePath+Global.CACHE_FILE %>ShowHidden_showHidden.js"></script> <div style="padding:20px;"> 将输出的0、1转化为描述文字显示:<br/> <script>document.write(showHidden['0']);</script> | <script>document.write(showHidden['1']);</script> <hr/> select标签演示:<br/> <div class="layui-form"> 默认选中1、select非必填: <script>writeSelectAllOptionForshowHidden('1');</script> <br/> 默认无选中项、select非必填: <script>writeSelectAllOptionForshowHidden('');</script> <br/> 默认无选中项、默认提示为“请选择一项吧”、select非必填: <script>writeSelectAllOptionForshowHidden_('', '请选择一项吧', false);</script> <br/> 默认选中0、默认提示为“请选择一项吧”、select为必填: <script>writeSelectAllOptionForshowHidden_('0', '请选择一项吧', true);</script> <div class="layui-form-item" style="padding-top:15px;"> <div class="layui-input-block"> <button class="layui-btn" lay-submit="" lay-filter="demo1">保存修改</button> <button type="reset" class="layui-btn layui-btn-primary">重置</button> </div> </div> </div> <br/> 需注意,使用select标签时,其上层 class="layui-form" 要加上,别落下 </div> <script> //此JS代码仅仅只是提交时才会用到,若不需要提交按钮,则完全不用加这段js代码 layui.use(['form', 'layedit', 'laydate'], function(){ var form = layui.form; //监听提交 form.on('submit(demo1)', function(data){ $.showLoading('保存中...'); var d=$("form").serialize(); $.post("http://www.baidu.com", d, function (result) { $.hideLoading(); var obj = JSON.parse(result); if(obj.result == '1'){ parent.layer.msg('操作成功', {shade: 0.3}); }else if(obj.result == '0'){ parent.layer.msg(obj.info, {shade: 0.3}) }else{ parent.layer.msg(result, {shade: 0.3}) } }, "text"); return false; }); }); </script> <jsp:include page="iw/common/foot.jsp"></jsp:include>
预览效果: