处理ajax服务由于登录超时返回异常的情况

发表于3年前(Feb 26, 2017 12:04:08 PM)  阅读 1848  评论 0

分类: Java WEB前端 JS

标签: ajax 登录超时 401 UNAUTHORIZED

ajax技术现在已经非常普及,常用来异步加载数据,也用来异步加载页面,现在越来越流行的单页应用SPA,页面几乎全是用ajax加载进来的。对于传统页面,如果登录超时,再提交请求时,一般后台将会把用户直接转发到登录页面,而使用ajax请求页面,如果你不注意,可能一不小心,就把登录界面load到当前页面,作为当前页面的一小部分了,这显然不是我们所期望的,接来下笔者说下我是如何处理这种情况的。

补齐HTML标签

发表于3年前(Feb 25, 2017 2:10:33 PM)  阅读 1390  评论 0

分类: Java

标签: htmlparse 补齐标签 CompositeTag

在一些博客系统中,非文章阅读页面一般不会显示文章的文章内容,一般是显示文章的摘要信息,而摘要信息的生成,有些系统是由用户自行编辑,而有些系统是通过正文截取的。如果通过截取方式,我们代码一般很难将文章截取得恰到好处,主要是字面断字困难,只能设定截取多少个字符,而内容一般是富文本,即包含html标签,通过字数方式截取,可能将一些html标签从中打断,导致原来的富文本内容html标签不完整,而展现时浏览器会尝试修复,自动补齐丢失的标签,从而造成页面显示异常。

如何解决上面的问题呢,笔者一般通过两种方式解决。一个就是显示摘要时,将所有的html标签都去除显示,这样自然简单很多,但这只适用于小段文本,摘要比较短的情况,试想如果很长一段摘要,无格式显示,对阅读者肯定会造成反感。其次就是补齐html标签,它不是丢了几个标签吗,我们人为给他补上呗。

DhtmlXGrid适配器

发表于3年前(Dec 15, 2016 12:07:59 PM)  阅读 1631  评论 0

分类: WEB前端 JS

标签: bootstrap-table DhtmlXGrid DHtmlXGridJsonAdapter 适配器

DHX是一个国外的javascript库,包括了很多javscript插件,数据方面有关的就包括Chart、Tree、DataView、TreeGrid、Grid、TreeView、List。其中Grid算是用得比较多的了。

DhtmlXGrid有几个缺点,一般来说,都是后台组装好需要的xml数据,返回给前台使用,后台代码跟前台绑定太紧密,前台需要哪些字段,显示顺序是什么,后台都得事先考虑好。如果前台展示的顺序变了,后台代码也得跟着修改。对于不用显示,但后续操作可能需要用到的字段,像数据的主键这种,后台需要返回,前台通过设置隐藏实现,如果需要增加显示的字段,后台就也得改代码,非常不方便。

现在主流用的表格插件bootstrap-table提供的API就很好使用,这里笔者习惯了使用bootstrap-table,碰到项目需要使用DhtmlXGrid各种不爽,于是写了一个适配器,可以使用类bootstrap-table API的调用方式来生成DhtmlXGrid代码。

 

......

审核状态机-状态模式的应用

发表于3年前(Dec 14, 2016 8:54:35 PM)  阅读 4314  评论 2

分类: Java

标签: 审核状态机 状态模式 多层审核机制

1、前言

简单描述一下状态模式:

状态模式:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。

在很多情况下,一个对象的行为取决于一个或多个动态变化的属性,这样的属性叫做状态,这样的对象叫做有状态的(stateful)对象,这样的对象状态是从事先定义好的一系列值中取出的。当一个这样的对象与外部事件产生互动时,其内部状态就会改变,从而使得系统的行为也随之发生变化。

这里笔者实现一个审核状态机,主要流程是,用户申请审核,审核人员进行审核通过或者拒绝操作,允许用户取消审核申请。这是常用的一个业务流程,用户可以根据实际情况修改。

2、状态

首先,找出所有的状态,如下图:

NullState主要是初始化的时候给的状态。PassEndState主要是为了应对后面的多层审核机制而加上的,因为管理比较严的流程经常需要进行多层审核。

3、方法

......

Hibernate5关于主键生成策略的变化

发表于3年前(Dec 11, 2016 12:03:52 PM)  阅读 2582  评论 0

分类: Java

标签: hibernate5 主键生成策略 GenerationType IdGeneratorStrategyInterpreter FallbackInterpreter LegacyFallbackInterpreter hibernate.id.new_generator_mappings

最近在研究springboot,现在最新稳定版本为1.4.2,里面使用的hibernate版本已经升级到5.0.11,搭了个框架,发现几个问题,记录一下。

网上有很多介绍hibernate5新特性的文章,千篇一律,估计都是出自一人手中,其中有一点就是说hibernate5扩展了Auto id的生成支持:

JPA定义的GenerationType.AUTO属性仅支持数字类型.从5.0开始,hibernate高度扩展并支持更广泛的类型,包括内置支持数字类型(如整型(Integer)\长整型(Long))和UUID.通过新的拓展类org.hibernate.boot.model.IdGeneratorStrategyInterpreter,用户还能自由地定制自己的策略来使用GenerationType.AUTO

用过JPA的都知道,JPA提供的四种策略来生成主键,用法为TABLE,SEQUENCE,IDENTITY,AUTO. 

......

jQuery使用data方法获取DOM绑定事件

发表于3年前(Nov 23, 2016 8:57:30 PM)  阅读 1323  评论 0

分类: WEB前端 JS

标签: data _data event

jQuery在1.8版本前,可以使用如下代码获取DOM元素绑定事件:

$.data(domObj,'events');//或者$('selector').data('events')

1.8版本以后:

$._data(domObj,'events');//注意,这里不能像$('selector')._data('events')这样用了。

使用下面的写法可以兼容各个版本:

var eventsData = $.data(domObj,'events') || $._data(domObj,'events');

bootstrap-table复选框增加默认值

发表于3年前(Nov 20, 2016 12:09:48 AM)  阅读 5530  评论 0

分类: WEB前端 JS

标签: bootstrap-table checkbox formatter

bootstrap-table可以通过使用{field: 'state',checkbox: true}来设置某列显示为checkbox复选框,而我们有时需要在数据列表初始化的同时初始化checkbox的选中状态,这时可以通过增加formatter函数来实现{field: 'state',checkbox: true,formatter:stateFormatter}。

function stateFormatter(value, row, index) {
        if (some coditon) {
            return {
                disabled: true,
                checked: true
            };
        }
        return value;
    }

在stat

......

设置一周第一天从星期一开始

发表于3年前(Nov 19, 2016 9:35:39 PM)  阅读 6586  评论 1

分类: Java

标签: Calendar setFirstDayOfWeek

也许你碰到过这种业务,需要根据星期几来做某种操作,例如,每周二,上周二等。Java提供了Calendar类可以实现这些需求,不过这里有个坑,值得注意。

国外都是以星期日作为每周的第一天,而我们都是以周一作为第一天,所以如果你不注意的话,在周日的时候获取上周的某个星期几,或者这周的某个星期几就会出现错误。因为Java就是默认以星期日作为一周的第一天。还好Calendar提供了接口,修改这个配置。

Calendar c = Calendar.getInstance();c.setFirstDayOfWeek(Calendar.MONDAY);

这样,Calendar就是以周一作

......

hibernate-validator在windows服务器下和weblogic冲突

发表于3年前(Sep 14, 2016 5:17:08 PM)  阅读 1447  评论 0

分类: 开发运维环境

标签: hibernate-validator和weglogic冲突 traversableResolver

1、weblogic错误日志

2、错误原因

具体怎么找到错误原因的不说了,最终确认是因为项目中的hibernate-validator库和weblogic冲突导致的。hibernate-validator版本为5.2.4.Final,尝试过升级或降级hibernate-validator版本均失败,hibernate使用的是4.3.8。

3、解决办法

ajax load content .ready

发表于3年前(Jul 12, 2016 11:07:51 AM)  阅读 1434  评论 0

分类: WEB前端 JS

标签: load .ready

ajax load方法是常用的加载页面的方法,特别是对于SPA单页面应用来说,几乎每个应用都是通过ajax load进行展示的。document.ready方法也是经常使用的方法,document.ready方法将会在document的dom元素加载完成的时候执行。ajax load和document.ready两者结合在一起会发生什么事呢。

假设有A,B两个页面,A页面ajax load B页面,B页面想在页面内容加载完,即document.ready事件里面执行一段方法,能正常执行成功吗。

这时候,结果取决于B页面的元素内容,B页面是一个新的document,还是原来的document。如果是一个新的document,即页面内容包含html节点,document.ready会正常执行,因为这个document是当前新的document。如果当前页面没有包含html节点,document.ready方法会立马执行,因为这个document是旧的document,而旧的document早已ready,所以这时候可能就不是你期望的执行顺序了。

......