使用requirejs引入jqGrid插件

发表于4年前(May 23, 2016 9:30:01 AM)  阅读 2195  评论 0

分类: WEB前端 JS

标签: requirejs jqGrid grid.base jqGrid.locale

jqGrid是一个显示表格的jquery插件,除了能分页显示数据,还能进行过滤,行内编辑等等,几乎一切你能想到的功能,功能多,必然就庞大,其实我们经常使用的只是其中几个功能而已,所以很多人可能更愿意使用更加简单地表格控件。

requirejs是现今比较流行的js模块化的工具,可是使js按需加载,合并等一系列优化操作。

jqGrid官方文档中并没有说明如何使用requirejs引入jqGrid,只说明了传统的引入方式,简单来说就是下面几步:

<link rel="stylesheet" type="text/css" media="screen" href="path_to_ui_css_file/jquery-ui-1.7.1.custom.css" />
<link rel="stylesheet" type="t
......

hql,jpql变量占位符不能出现.

发表于4年前(May 19, 2016 8:27:55 AM)  阅读 1691  评论 0

分类: Java

标签: hql jpql 占位符 Unresolved property path unexpected AST node

hql,即hibernate query language,使用面向对象的方式书写sql语句,jpql,Java Persistence Query Language,主要用于jpa,而hibernate是jpa的一种实现,所以其实hql也可以说是jpql的一种实现,两者用法基本一致。

为了避免直接拼写hql,造成sql注入,我们写hql的时候,必须使用绑定变量的方式进行赋值。hql绑定变量有两种方式,一种是使用"?"占位符,根据"?"出现的顺序,提供参数,一种是使用变量名称的方式绑定。两种方式的示例:

String hql = "from Person p where p.id=?";
String hql = "from Person p where p.id=:id";

两种方式各有优势,都有相应地使用场景。

笔者要在这提的是变量绑定时需要注意的一个问题,如果变量里面包含".",将会

......

Freemarker使用java枚举值、静态属性和调用静态方法

发表于4年前(May 17, 2016 3:14:52 PM)  阅读 10068  评论 0

分类: Java

标签: BeansWrapper TemplateHashModel StaticModels StaticModel 枚举值 enum 静态属性 静态方法

1、前言:

在java后台,规范的编码方式将会使我们使用很多静态属性,枚举值等,还有许多工具类,都会定义很多静态方法方便调用,这些都方便了我们java后台的开发,但如果结合到前台freemarker模板该如何使用呢,freemarker模板并不能像jsp那样import标签导入java类。

首先我们来看这么一个枚举值类OptionValueType:

 

package com.cangzhitao.common.enums;

/**
 * Created by cangzhitao on 16/5/13.
 */
public enum OptionValueType {

    TEXT(0), TEXTAREA(1), RADIO(2), SELECT(3), CHECKBOX(4), THEME(10), NAVMENU(11);

    private int code;

    priv
......

js变量,方法作用域的几个误区

发表于4年前(May 16, 2016 9:45:05 AM)  阅读 1355  评论 0

分类: WEB前端 JS

标签: .ready 变量作用域 ajax.load

最近几个以前前端接触较少的同事在开发过程中经常碰到页面js找不到方法定义的类似错误,这都是因为页面js代码太多,各种回调,页面之间相互load,把自己绕晕了,不知道该如何写代码了,其实说到根本是没搞清楚js变量,方法定义的作用范围,下面笔者对容易出错的几个地方说明一下。

1、document ready方法

现在不管是传统项目还是互联网项目,jquery几乎成了必不可少的插件,jquery使用最多的除了各种选择器,估计可能要算document.ready方法了。笔者在08年接触jquery,真正用熟是几年后了,当初的理解跟现在理解有些不同,不知道当时理解有误还是大家都是那么用的。最初,笔者会在head里面将jquery引入,然后会在body前添加document.ready方法,形成了固有的编码习惯。后来,了解到性能优化相关的知识,也知道行业基本都是head引入css,body结束前引入js,不过对于jquery到底何时引入,还是要看具体情况的,如果在body结束前引入,势必要将document.ready方法也要滞后。一般来说,大家都知道

......

jquery load页面导致js重复加载

发表于4年前(May 11, 2016 1:03:36 PM)  阅读 4476  评论 0

分类: WEB前端 JS

标签: 缓存 jquery load js重复加载 事件重复监听 事件监听多次 ajaxSetup cache

1、问题发生场景:

主页包含两个div,div1,div2,div1采用jquery load了page1,div2采用jquery load了page2,page1与page2业务类似,共用一个js,主页可能同时显示page1和page2,这时发现js重复加载了。

2、问题分析:

打开chrome,查看network,在load page1时js后面自动加上了?_1462934775039参数,数字应该是时间戳,紧接着load page2时,js又load了一次,同样带了一个时间戳,和之前时间戳不一样。

首先,js后面带了时间参数是避免使用缓存,看来jquery load方法是默认给js不缓存。其次不管js是否是缓存,加载两次,里面的内容都会执行两次,如果是同名方法定义,后面的方法会覆盖前面的方法,如果是事件监听,则会出现添加多次的情况,这样就会有问题,其实发现这个问题就是因为笔者js里面的事件监听执行了多次,导致页面表现异常。例如如下代码就会导致执行两次:

......

bootstrap模态窗口modal使用remote加载数据的缓存问题

发表于4年前(May 10, 2016 9:16:51 AM)  阅读 9020  评论 2

分类: WEB前端 JS

标签: bootstrap modal remote 缓存 removeData show.bs.modal hidden.bs.modal

模态窗口是很常用的控件,经常用来装载复杂的表单,bootstrap提供的modal模态弹窗提供了data-remote属性,用来指定远程加载的页面。但是该功能有个问题,如果该弹窗实例已经运行一次,则不会加载远程url的内容了,也就是说,如果您使用他加载一个动态表单,加载一次以后,除非刷新页面,再次弹窗依然是上次加载的内容。这个问题也许并不一定是bug,可能作者就是为了性能考虑,特意做的缓存,如果能配置是否缓存就更加完美了。

为了解决缓存问题,有几下几种方案:

1、移除绑定数据

在打开modal之前(show.bs.modal)或者关闭modal之后(hidden.bs.modal)移除之前绑定的数据,可以单独针对一个modal操作,也可以添加全局的监听方法,如:

......

Spring MVC上下文与Spring上下文的关系

发表于4年前(May 4, 2016 8:44:22 AM)  阅读 1886  评论 0

分类: Java

标签: spring上下文 spring-mvc WebApplicationContext WebApplicationContextUtils RequestContextUtils

用Spring容器管理Bean是我们一惯的做法,这里的Spring容器指的就是Spring上下文。一般来说,我们会使用注入的方式将所需要的Bean注入到目标Target,但有时还是会存在不适合注入的情况,例如动态获取之类的,这时我们可能会直接去Spring上下文中去取。笔者就经常使用ContextLoader.getCurrentWebApplicationContext().getBean("")的方式去获取Bean。

前两天笔者在项目中引入了hibernate-validate库,在Spring-MVC.xml配置文件中增加了hibernate-validate的相关配置,为了不影响之前固有接口,笔者准备使用编程式验证,将Spring-MVC中得validator注入到所有controller的共同父类中去。可是发现,竟然从Spring上下文中取不出validator来。

查了下资料,发现原来是有两个上下文,Spring上下文保存在ServetContext中,追查源码可以看到key是
String R

......

formhash的使用

发表于4年前(Apr 26, 2016 11:53:42 AM)  阅读 2038  评论 0

分类: Java

标签: formhash htmlunit 投票

1、前言:

前几天朋友让帮忙网上投票,研究了一下投票的网站,投票的机制是同一ip每天只能投一票,这种机制比较弱,使用代理ip即可解决,或者在家用代码控制路由器重新拨号或重启获取新的ip,于是笔者就开始进一步抓取投票的服务地址。服务地址很容易提取,换ip进行测试投票,发现服务器拒绝了,说请求非法,经过仔细分析测试,发现服务地址中包含了formhash参数,值为固定8位字符,很像md5后取8位的字符,如:d952227a。请求页面时,将会生成formhash,提交请求时,后台将验证formhash的正确性,笔者分析了下,这里formhash的生成跟ip地址以及浏览器类型(可能是User-agent)有关,应该是这两者加混淆字符后8位md5,如果能解密出这个加密方法,生成formhash,问题就解决了,这涉及到密码学的问题,笔者想想难度应该还是挺大的,formhash在这就一定程度上防止了程序提交。

2、formhash:

在这里,formhash有点像不用用户自己输入的验证码,笔者搜索了一下,好像formhash最早是

......

指定参数名称,参数值查询数据的通用方法

发表于4年前(Apr 25, 2016 9:43:58 AM)  阅读 1514  评论 0

分类: 框架 mybatis

标签: 动态sql findByParams

接上篇文章,继续完善BaseMapper。

1、BaseMapper.xml:

增加findByParams SQL

<select id="findByParams" parameterType="Map" resultType="Entity">
        SELECT * FROM ${__tableName__} t WHERE 1=1
        <foreach collection="params" index="index" item="item" open=" and " separator=" and " close="">
            ${item.name}=${item.value}
        &
......

搭建基于mybatis的后台框架

发表于4年前(Apr 18, 2016 11:51:17 AM)  阅读 2665  评论 0

分类: Java 框架 mybatis

标签: mybatis mapper Interceptor 框架搭建

1、前言

最近新搭建一个框架,以前用过mybatis,这次第一次自己搭建基于mybatis的框架,架构基本上沿袭以前hibernate的套路,说到这,笔者对两者的观念基本还是停留在hibernate自动生成SQL,mybatis需要自己写SQL,mybatis自己写SQL开发起来麻烦,但SQL语句写起来灵活,容易实现功能,性能也更容易优化,而hibernate其实大部分情况下性能也够用,优化起来确实需要一定功底,在hibernate有时不容易实现的功能,笔者实际上会结合jdbcTemplate一起使用,所以一直使用hibernate也没发现什么问题。这次选用mybatis,其实主要是一次尝试。

2、概述

所有的实体都必须实现Entity接口;
所有的Mapper都必须继承BaseMapper,BaseMapper是一个泛型类,有两个泛型参数,一个是该Mapper操作的实体类型,另一个是序列化id类型,BaseMapper里面定义了通用的Mapper接口;
所有的DAO接口都继承于IBaseDA

......