sublime的常用快捷键改成idea的习惯

sublime->preferences->Key Bindings – user 贴下面的一段:
[
{ “keys”: [“super+y”], “command”: “run_macro_file”, “args”: {“file”: “res://Packages/Default/Delete Line.sublime-macro”} },
{ “keys”: [“super+d”], “command”: “duplicate_line” },
{ “keys”: [“ctrl+super+up”], “command”: “swap_line_up” },
{ “keys”: [“ctrl+super+down”], “command”: “swap_line_down” }
]

通用分页信息tag标签

在实际工作中,几乎所有的列表都需要进行分页,写一个通用的tag标签,方便分页html代码的嵌入。

以下是结合我自己的生产环境。

前提:
1,必备神器:spring-data-jpa,主要用于输出page对象。

2,jquery,bootstrap

代码:
1,先看controller。负责提供page数据对象

继续阅读

hibernate validator 使用情景

一般都是hibernate validator结合spring的@Valid来实现对实体类的属性的后台验证,但是应该选择性的使用。比如:

用户注册界面,有个密码确认字段conPassword,表单提交时不能为空,验证代码:

controller在入参加入@Valid User user就可以验证不能为空了。

但是conPassword不是表字段,只是一个view field,如果一个entity类似的字段很多,那基本没法看了。所以我还是倾向将view field和table field区分开来验证,加入一个UserForm,代码:

对应controller方法入参改为:@Valid UserForm userForm,在方法里写:

把判空和match的逻辑直接写到controller的方法里,这样将来有多少个view field,妈妈也不用为我担心了。

继续写用户修改,我的用户修改是没有密码更改功能的,我单写了一个方法专门用来更改密码,而且username是不能修改的,把create的代码copy过来,删除密码的部分,开始运行,控制台报错,说password字段不能为空,把user entity的password字段上的@NotNull去掉,然后在create里再加上password判空的代码,ok,顺利通过验证。

总结:
1,hibernate validator确实好用,但是需要结合实际情景选择性的使用,我的原则是只对data field的格式、长度验证,判空放到controller里直接写,view field直接放在form里,与实体类属性解耦

2,hibernate validator实际作用是在presist或update数据时验证字段是否满足条件,只不过现在被spring拿来做表单验证了而已,如果你@Valid的验证通过,但是之后你对entity属性进行了改动,不能满足验证条件,那么在presist或update之前还是会被验证器拦截下来。

3,所有验证注解尽量都使用标准的注解(javax.xxxx.xxxxx),hibernate-validator只不过是对这些标准的实现。

招商银行类型23ukey无法在win8虚拟机中使用的解决方法

为了能使用招商银行客户端,我在我的rmbp里使用VMWare装了一个win8,但是始终无法识别我的ukey(类型23),ukey上的灯都不亮。

解决办法:
在vmware设置界面找到”USB和蓝牙”,点开”USB高级选项”,把”USB兼容性”从3.0设置成2.0(得先关闭虚拟机),开机插ukey,一切正常了。

A noob problem about Spring mvc

想用restful风格的url,在web.xml里配置了spring mvc。

然后随便写个controller跳转到WEB-INF/jsp/test.jsp,提示我:

然后google一万次找到了这个
http://stackoverflow.com/questions/16029858/mixing-rest-and-jsp-in-spring-mvc-cannot-find-jsp

这个故事告诉我们:一定不要写/*!只需写/

具体为啥写/,请自行google “servlet url-pattern”,老他妈复杂了。。。

补充:
研究了一下servlet url-pattern。
1,写死型:/task/new 只匹配这一个url
2,万能型:/* 匹配所有url,所以jsp也会走dispatcherServlet,导致找不到。
3,后缀型:*.do 匹配所有.do结尾的url,最常用的,但是没法弄成restful风格的url
4,默认型:/ 其实就是一个特殊的写死型,规定先匹配默认servlet,比如如果用tomcat,任意url进来都先被tomcat默认的servlet处理,处理不了再扔个dispatcherServlet,tomcat默认的servlet对*.jsp进行了处理,所以上面提到的问题就解决了,但是你换一个比如index.html还是会走dispatcherServlet,还会找不到,也就是说如果你项目有静态资源(css,js,html…),都会走dispatcherServlet,所以还是得自己写个规则排除一下

URI与URL的区别

URI表示一个资源。URL表示如何访问这个资源。

打个比方,整个互联网是一张地图,uri是地图上的每一个地点的位置,url咋能到那个位置。

转自网络的一张图片,原文地址404了,不贴了。
uri_url

spring xml shortcut with the c-namespace

大家应该都知道有个p

c基本一样,只是c表示constructor-arg

如果你不知道构造函数参数的名字,那就这样写: