-
[jeeplus] 使用笔记 (gridSelect、datetimepicker etc.)
2019-07-22 18:31java 中 字符串的 slipt() 方法
- slipt() 方法会在分割完成后,对获取到的数组从末端开始验证是否为"",若 true 则,数组长度 -1 ,直到遇到一个不为"" 的元素。
- 此时,在这个不为 "" 的元素之前的所有其他 "" 元素依旧保留。(未验证数组起始端的 "" 是否验证排除)
- 不知道从 1.5 开始到现在最新版本,该方法是否发生变化。
public static void main(String[] args) { String s = ""; String[] ss = s.split(","); System.out.println(ss.length);//1 System.out.println(Arrays.toString(ss));//[] System.out.println(ss == null);//false System.out.println(ss[0] == null);//false String s1 = "123-123.2-1--"; String[] ss1 = s1.split("-"); System.out.println(ss1.length);//3 System.out.println(Arrays.toString(ss1));//[123, 123.2, 1] String s2 = "123--123.2-1--"; String[] ss2 = s2.split("-"); System.out.println(ss2.length);//4 System.out.println(Arrays.toString(ss2));//[123, , 123.2, 1] }
参考 :
https://blog.csdn.net/qq_27093465/article/details/54910323 -
社区缺陷报告与功能建议
2019-07-20 21:54😂 好吧,还真是必须有关键词才能搜索。
但是,这个其实我是想搜索 我发的 所有 问答贴 ,然后一个个检查下有没有没关闭的,
如果必须要关键词的话,可能会有几个问题,- 不能查找我发布的所有某种类型的帖子
- 在使用高级搜索的情况下,很大可能都是忘记了关键词,如果有关键词,有很大概率用不上高级搜索了。
- 还有一个就是此处应该有个提示,右侧的条件刚开始我以为有单独的搜索按钮,后来一直找不到,才发现需要点击那个唯一的搜索按钮。因为刚开始因为布局的原因吧,以为这个按钮不是和高级搜索有关联的。
-
社区缺陷报告与功能建议
2019-07-20 18:05
报告大王,高级搜索这里是不是因为这个 js 报错没有结果呢btw,这个 [缺陷报告] 文章现阶段有没有,或者可不可以在明显位置有个快捷访问链接呢,(后续可以放到更加隐藏位置或者取消)
比如页面底部,或者右上角个人头像菜单里面,
-
[jeeplus] 使用笔记 (gridSelect、datetimepicker etc.)
2019-07-20 17:50为 jp 工具添加自定义方法,实现 js 的 unicode 编码
在 jeeplus.js 中的添加方法
(function(){ jp = { /** 实现 unicode 编码 */ toUnicode : function (s) { var str = ""; for (var i = 0; i < s.length; i++) { str +="\\u"+('0000' + s.charCodeAt(i).toString(16)).slice(-4)+""; } return str; }, } })(jQuery);
实现效果:
需要注意的是:
"\u0061\u0062\u0063"
中间需要转义字符:
"\\u0061\\u0062\\u0063"
-
[jeeplus] 使用笔记 (gridSelect、datetimepicker etc.)
2019-07-20 14:30Mysql 中对一个表中的字段进行汇总计算后 赋值给 其中一个字段
如:招生计划表中,按照年份、省份、批次、文理科、学校 分组汇总后,将各专业招生计划数汇总后,赋值给该校该年度该批次该省份该文理科中的 招生计划总数。
查询语句:
SELECT COUNT(zhaoshengjihua) AS jihuazongshu, zhaoshengjihuazongshu, shengfen, nianfen, wenlike, pici, daxuedaima, daxuemingcheng FROM d_zhaoshengjihuabiao GROUP BY shengfen, nianfen, wenlike, pici, daxuedaima;
*zhaoshengjihuazongshu 字段中已经被赋值了,原来该字段中的值为空最开始写出的 sql 如下,但是完全不正确。
UPDATE d_zhaoshengjihuabiao a SET a.zhaoshengjihuazongshu = ( SELECT COUNT(b.zhaoshengjihua) AS b.cou, b.shengfen, b.nianfen, b.wenlike, b.pici, b.daxuedaima FROM d_zhaoshengjihuabiao b GROUP BY b.shengfen, b.nianfen, b.wenlike, b.pici, b.daxuedaima ) WHERE b.shengfen = a.shengfen AND b.nianfen = a.nianfen AND b.wenlike = a.wenlike AND b.pici = a.pici AND b.daxuedaima = a.daxuedaima
在网上搜索后,看到如下 2 条 sql 做为参考:
-- 1 UPDATE au_window_re_project aw SET aw.project_name = ( SELECT ap.SERVICENAME FROM apas_service ap WHERE ap.unid = aw.PROJECT_ID ) -- 2 UPDATE test_user_points AS a LEFT JOIN ( SELECT user_id, sum(point) AS point_count FROM test_point_log GROUP BY user_id ) AS b ON a.user_id = b.user_id SET a.point_count = b.point_count
最终参考第 2 条 SQL 写出如下语句,可以实现要求:
UPDATE d_zhaoshengjihuabiao AS a LEFT JOIN ( SELECT COUNT(zhaoshengjihua) AS cou, shengfen, nianfen, wenlike, pici, daxuedaima FROM d_zhaoshengjihuabiao GROUP BY shengfen, nianfen, wenlike, pici, daxuedaima ) AS b ON ( a.shengfen = b.shengfen AND a.wenlike = b.wenlike AND a.nianfen = b.nianfen AND a.pici = b.pici AND a.daxuedaima = b.daxuedaima ) SET a.zhaoshengjihuazongshu = b.cou ;
-
[jeeplus] 使用笔记 (gridSelect、datetimepicker etc.)
2019-07-19 16:26Jeeplus 的树形结构表,在 List.jsp 展示中的问题:某个字段使用字典后,需要在 js 中进行转化。
eg:可以参考 area.js
-
SSM 中 MyBatis 的某个 xxxMapper.xml 中,是否可以这样写?
2019-07-18 19:34这块我其实是传的
"xxx%xxx%xxxx%xx"
,
至于这块拼接 % 的原因大致是因为此处是个 findList 的查询 SQL,适用于很多地方,尤其是用在用户输入某字段值后进行模糊匹配查询,这种可能是因为在这块 sql 中设置拼接 % 比在 C 或 S 层进行拼接要方便多,最主要是这个是 代码生成 的一个功能决定的应该。
jeeSite 这类有 代码生成 功能的框架应该这么处理是最好的吧。 -
[jeeplus] 使用笔记 (gridSelect、datetimepicker etc.)
2019-07-18 17:50Mysql 这个 Cascade 在更新了主表的关联字段如 user 表中 id 可以更新附表中的关联字段,比如 附表中的 userid 吗?
有没有一种方法,可以只设置 1 个 字段为外键后,其他几个字段作为同步关联字段,比如 主表 user 表中 id, name, age ,sex 将 id 设置为外键关联附表的 userid 后,同时附表中也包含了 username , userage, 能否不再设置其他外键情况下,实现更新主表中的 id,name,同步更新附表中的 userid, username 呢?
还是必须再为 name --> username 做一个外键关联一下? -
SSM 中 MyBatis 的某个 xxxMapper.xml 中,是否可以这样写?
2019-07-18 10:56😁 这个是 jeesite、jeeplus 框架项目里面都是这种,可以配置不同的数据库,不用单独修改 mapper.xml 好像。
-
[jeeplus] 使用笔记 (gridSelect、datetimepicker etc.)
2019-07-17 16:17IDEA 中怎么可以查看某个类被哪些类引用了?
就是哪些类中使用了该类做属性,包含着该类?
ctrl+alt+u 只能查看该类 继承、实现 了哪些类 ?
emmm.....应该怎么讲呢? -
[jeeplus] 使用笔记 (gridSelect、datetimepicker etc.)
2019-07-16 10:30SSM 中 MyBatis 的某个 xxxMapper.xml 中,是否可以这样写?
<if test="planMajorName != null and planMajorName != '' and r1 = '0'"> AND a.planmajorname = #{planMajorName} </if> <if test="planMajorName != null and planMajorName != '' and (r1 = null or r1 = '')"> AND a.planmajorname LIKE <if test="dbName == 'oracle'">'%'||#{planMajorName}||'%'</if> <if test="dbName == 'mssql'">'%'+#{planMajorName}+'%'</if> <if test="dbName == 'mysql'">concat('%',#{planMajorName},'%')</if> </if>
-
我的明月清风我的日常贴
2019-07-15 21:12😭 😭 😭
昨晚大致浏览了下《此房是我造》,造成心理阴影了,不为别的,只为猫王他孙女。fxxxxxxxxxxxxk.........
我要忘记这个画面
-
我的明月清风我的日常贴
2019-07-13 19:56我喜欢的 HEXO 主题
1.Asnippet
A simple and interesting theme
2.Clover
A real simple theme
3.Diaspora
A clean and responsive theme
https://blog.zhangruipeng.me/hexo-theme-icarus/
- 其他的见个人博客主题收藏夹
-
ES6 语法简介
2019-07-13 17:21观后感
- 写教程相当于练内功,写 app 相当于会武功的镖头闯荡江湖走镖。
古代的绿林江湖门派里的人,每天除了练功,吃啥喝啥啊?可能人家都是大地主,家里有地有房有矿,岳不群也是个大地主,然后经常派外门弟子去收租子。咦,这样貌似很好玩哇,明显就像《了不起的修仙模拟器》啦,难道说,武侠游戏的发展趋势就是除了现有的 武功养成,还要加上 门派经济管理, 毕竟经济、政治、文化才是最好玩的,而且,下一波新人类会玩的越来越深,普普通通的一刀一刀砍怪,几率掉宝已经远远低于玩家 G 点阈值了。嗯,是个好主意。- 不错,这篇教程写的好。
😂 谁控制了我的思路啊,有点飘的害怕
-
[jeeplus] 使用笔记 (gridSelect、datetimepicker etc.)
2019-07-10 14:49关联查询中如果使用了 如下注释中的关联,则会造成查询花费时间很长。 1.38s --> 0.014s
LEFT JOIN m_rank majorrank ON majorrank.id = a.majorrankid -- ( -- majorrank.majorid = emcode.levelformajorsid -- AND majorrank.universityid = emcode.universityid -- )
-
controller 层是否需要抽取 CRUD?
2019-07-10 12:58接上楼(😳 一楼最多 4096 字符)
/** * 授权登录异常 */ @ExceptionHandler({AuthenticationException.class}) public String authenticationException() { return "error/403"; } /** *系统登录异常 */ @ExceptionHandler({Exception.class}) public String exception() { return "error/500"; } /** * 初始化数据绑定 * 1. 将所有传递进来的String进行HTML编码,防止XSS攻击 * 2. 将字段中Date类型转换为String类型 */ @InitBinder protected void initBinder(WebDataBinder binder) { // String类型转换,将所有传递进来的String进行HTML编码,防止XSS攻击 binder.registerCustomEditor(String.class, new PropertyEditorSupport() { @Override public void setAsText(String text) { setValue(text == null ? null : StringEscapeUtils.escapeHtml4(text.trim())); } @Override public String getAsText() { Object value = getValue(); return value != null ? value.toString() : ""; } }); // Date 类型转换 binder.registerCustomEditor(Date.class, new PropertyEditorSupport() { @Override public void setAsText(String text) { setValue(DateUtils.parseDate(text)); } // @Override // public String getAsText() { // Object value = getValue(); // return value != null ? DateUtils.formatDateTime((Date)value) : ""; // } }); } /** * 获取bootstrap data分页数据 * @param page * @return map对象 */ public <T> Map<String, Object> getBootstrapData(Page page){ Map<String, Object> map = new HashMap<String, Object>(); map.put("rows", page.getList()); map.put("total", page.getCount()); return map; } }
-
controller 层是否需要抽取 CRUD?
2019-07-10 12:57这是 jeeplus 中的 Controller 层基类,你对比下
/** * 控制器支持类 * @author jeeplus * @version 2016-3-23 */ public abstract class BaseController { /** * 日志对象 */ protected Logger logger = LoggerFactory.getLogger(getClass()); /** * 管理基础路径 */ @Value("${adminPath}") protected String adminPath; /** * 前端基础路径 */ @Value("${frontPath}") protected String frontPath; /** * 前端URL后缀 */ @Value("${urlSuffix}") protected String urlSuffix; /** * 验证Bean实例对象 */ @Autowired protected Validator validator; /** * 服务端参数有效性验证 * @param object 验证的实体对象 * @param groups 验证组 * @return 验证成功:返回true;严重失败:将错误信息添加到 message 中 */ protected boolean beanValidator(Model model, Object object, Class<?>... groups) { try{ BeanValidators.validateWithException(validator, object, groups); }catch(ConstraintViolationException ex){ List<String> list = BeanValidators.extractPropertyAndMessageAsList(ex, ": "); list.add(0, "数据验证失败:"); addMessage(model, list.toArray(new String[]{})); return false; } return true; } /** * 服务端参数有效性验证 * @param object 验证的实体对象 * @param groups 验证组 * @return 验证成功:返回true;严重失败:将错误信息添加到 flash message 中 */ protected boolean beanValidator(RedirectAttributes redirectAttributes, Object object, Class<?>... groups) { try{ BeanValidators.validateWithException(validator, object, groups); }catch(ConstraintViolationException ex){ List<String> list = BeanValidators.extractPropertyAndMessageAsList(ex, ": "); list.add(0, "数据验证失败:"); addMessage(redirectAttributes, list.toArray(new String[]{})); return false; } return true; } /** * 服务端参数有效性验证 * @param object 验证的实体对象 * @param groups 验证组,不传入此参数时,同@Valid注解验证 * @return 验证成功:继续执行;验证失败:抛出异常跳转400页面。 */ protected void beanValidator(Object object, Class<?>... groups) { BeanValidators.validateWithException(validator, object, groups); } /** * 添加Model消息 * @param message */ protected void addMessage(Model model, String... messages) { StringBuilder sb = new StringBuilder(); for (String message : messages){ sb.append(message).append(messages.length>1?"<br/>":""); } model.addAttribute("message", sb.toString()); } /** * 添加Flash消息 * @param message */ protected void addMessage(RedirectAttributes redirectAttributes, String... messages) { StringBuilder sb = new StringBuilder(); for (String message : messages){ sb.append(message).append(messages.length>1?"<br/>":""); } redirectAttributes.addFlashAttribute("message", sb.toString()); } /** * 客户端返回JSON字符串 * @param response * @param object * @return */ protected String renderString(HttpServletResponse response, Object object) { return renderString(response, JsonMapper.toJsonString(object)); } /** * 客户端返回字符串 * @param response * @param string * @return */ protected String renderString(HttpServletResponse response, String string) { try { response.reset(); response.setContentType("application/json"); response.setCharacterEncoding("utf-8"); response.getWriter().print(string); return null; } catch (IOException e) { return null; } } /** * 参数绑定异常 */ @ExceptionHandler({BindException.class, ConstraintViolationException.class, ValidationException.class}) public String bindException() { return "error/400"; }