centos下设置时区
对于中国用户,如果centos默认使用UTC时区,那时间相差八个小时,其实可以通过简单的设置,变为中国时区,这时候机器上的时间和本地手表上的时间就是一致的。执行如下命令:
就可以了,如果没有看到/Asia/Shanghai文件,手动执行以下 tzselect ,按照提示选择即可。
对于中国用户,如果centos默认使用UTC时区,那时间相差八个小时,其实可以通过简单的设置,变为中国时区,这时候机器上的时间和本地手表上的时间就是一致的。执行如下命令:
就可以了,如果没有看到/Asia/Shanghai文件,手动执行以下 tzselect ,按照提示选择即可。
jquery提供了两个方法来获取页面的位置信息,offset方法能够得到元素的绝对位置,position方法是取原始的相对信息,方法返回是一个map对象,key分别是left和top。例如,$(‘#test’).offset().left 得到是id为test的元素距页面左边的像素。
何为绝对位置,何为相对位置呢?不管相对还是绝对,都有一个参照点,对于绝对位置比较简单,它的参照点永远是页面的左上角(注意:body默认是margin值的,如果没有手工修改此值,参照点不是正左上角,会有几个像素的偏移);相对位置的参照点就比较麻烦,很多地方都说相对父元素左上角,那究竟哪个算父元素呢?这个父元素并不一定是该元素的直接父元素,有可能是父元素的父元素,甚至可能的参考点是页面的左上角,父元素的定义是它的所有上层元素中第一个(距离本元素最近)css style中设置了position属性的元素,如果所有上级元素都没有设置该属性,那么参照点就是页面的左上角,跟offset一致了。
例如代码:
<div style="padding: 10px;border:1px solid; position: relative;width:180px;"> <div style="padding: 10px;position: relative;border:1px solid;"> <div id="test" style="background-color: #000;width: 20px;height: 20px;"></div> </div> </div>
这时id为test的div的相对位置的参照点就是他直接父元素,所以得到的left,top都为10,而下面的代码
<div style="padding: 10px;border:1px solid; position: relative;width:180px;"> <div style="padding: 10px;border:1px solid;"><!-- 注意没有设置position --> <div id="test" style="background-color: #000;width: 20px;height: 20px;"></div> </div> </div>
此时参照点就是最外层的div,因此left、top的值为21px,即10 + 1 + 10,10是padding,1是border的
firefox(版本3.6)下当input框或者textarea的属性设置为readonly,在html控件在页面显示中就有一个灰色的底色,如果不喜欢,可以通过css来解决它。例如定义一个readonly的class,input框设置class为readonly,即可。firefox查看效果,代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>firefox输入框</title> <style> .readonly { background-color:#fff; border:1px solid #7f9db9; padding:1px; } </style> </head> <body> <div style="width:400px;margin: 50px auto"> <input name="txt" readonly="readonly" value="默认情况" /> <br /><br /> <input name="txt" readonly="readonly" value="使用了自定义css" class="readonly"/> </div> </body> </html>
MyBatis的mapper接口不需要自己实现,框架会自动帮我们实现,到时候直接调用就可以了。定义的mapper接口中的方法可以有多个参数吗?答案是肯定。在Ibatis时代是自己通过代码实现如何调用xml中定义的statement,接受的参数只能是一个,所以处理的办法通常是用Map的方式。当然这个也能使用在MyBatis上,不过MyBatis提供更加简单的方法。下面就通过例子来说明。
Mapper接口
public interface TestMapper { Object meth1(String para1, String para2); /** * p1、p2可以是任何合法的java命名方式 * xml中可以根据此标示来获取到具体传入的值 */ Object meth2(@Param("p1")String para1, @Param("p2")String para2); }
mapper.xml
<select id="meth1" resultType="int"> select count(*) from test where col1 = #{0} and clo2 = #{1} </select> <select id="meth2" resultType="int"> select count(*) from test where col1 = #{p1} and clo2 = #{p2} </select>
上述两种方法都行的通,上述statement中不需要指定parameterType。如果不使用@Param注解方式,那么可以通过#{0}、#{1}的方式来获取参数的值,注意function中的第一个参数是0;使用了注解就按注解中定义的名字来取。推荐使用注解的方式。在方法重构时,例如增加、减少或调整参数的顺序,如果使用非注解的方式,在修改xml时就显得比较麻烦,可能里面的${0}、${1}、${2}都需要调整,而且不明确,特别是参数较多的情况下。
strtus2的版本为2.2.3.1,默认是支持转换枚举型参数。有一个问题,例如在action中声明了一个枚举类型的变量testEnum,在action中有该变量对应的get、set方法,如果页面传入的值不是枚举类型中指定的值,这时action中的testEnum为null,但在前端的freemarker模板中通过${testEnum}又能获取到这个值,也就是前面页面传入值,此时并没有调用action的中getTestEnum方法,这个时候应该是从ValueStack中取到的,因为在请求action的时候,已经把请求的参数放入了ValueStack。如果页面上需要action处理后的判断testEnum是不是为null,就不能直接使用<#if testEnum??>了,这个时候就必须还要判断一下testEnum的对象类型,具体的方法参看:freemarker中判断对象类型
在freemarker中似乎没有instanceOf这个方法,有时候页面上需要来判断变量的类型,可以使用变通的方法,如下
<#if myVar.class.simpleName == "Object Type"> ... </#if>
在photoshop中需要把图片的某一部分复制到图片的另一位置,有两种方法,其一是先选取需要复制的部位,然后ctrl+c、ctrl+v,这时候就会把复制的内容粘贴到一个新图层,选取该图层后可以进行位置的调整;另外一种是先选取图片,然后同时按住ctrl+alt,用鼠标拖动到目的地即完成了复制,注意此时不会创建新图层。
firefox中对于页面的输入框,如果输入了一些信息,当通过F5刷新页面后,刚输入的信息还是给保留下来了,这个功能似乎是firefox独有的,有时候确实给用户输入带来了方便,但有些情况不希望保留。
其实解决这个问题很简单,如果不希望保留,只要在对应的input加上一个
即可,autocomplete默认是on,也就是开启的,它的作用是把输入框以前的输入记录显示出来。
mybatis3中默认了标准的java类型的typeHandlers,对枚举类型也内置了一个叫EnumTypeHandler的处理器,但是有一个问题,如果在数据库里面的字段类型是SMALLINT、TYININT、INTEGER等数据类型,默认的EnumTypeHandler就不能处理了,http://asialee.iteye.com/blog/1013238,这个地方有比较详细的说明。解决这个问题有两种方法,一是修改数据库字段的类型为枚举类型,并且枚举值用字符表示;另外一种方法就是自己实现一个typeHandlers。实现的方法很简单,官方的手册上就一个例子。配置的时候需要注意,不光只在 MapperConfig.xml 配置
<typeHandlers> <typeHandler javaType="String" jdbcType="VARCHAR" handler="org.mybatis.example.ExampleTypeHandler"/> </typeHandlers>
还需要在对应的字段在resultMap中配置jdbcType属性,而且select的返回结果类型不能使用resultType,必须用resultMap,否则mybatis就无法应用用自定义的typeHandlers。为何一定要配置jdbcType呢?因为MyBatis为POJO中字段设置typeHandlers是根据在javaType和jdbcType来确定的,javaType可以根据POJO来获取,MyBatis不会审视数据库元信息来决定jdbcType,如果没有指定,那么都是按null来处理,因而获取typeHandlers通过javaType了,就算在MapperConfig.xml中配置的全局typeHandlers也无法正确应用。
另外一种配置是直接在resultMap中指定对应字段的typeHandlers,这样可以不在MapperConfig.xml配置typeHandlers和设置jdbcType。
官方文档中有如下说明:
使用这样的类型处理器将会覆盖已经存在的处理Java的String类型属性和VARCHAR参数及结果的类型处理器。要注意MyBatis不会审视数据库元信息来决定使用哪种类型,所以你必须在参数和结果映射中指定那是VARCHAR类型的字段,来绑定到正确的类型处理器上。这是因为MyBatis直到语句被执行都不知道数据类型的这个现实导致的。
由于没有很好的理解“不会审视数据库元信息来决定使用哪种类型”导致走了很多弯路,一直无法使用自定义的typehandler。
最近使用tomcat 6.0.33这个版本,启动的时候有个提示:
The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path:...
tomcat可以整合本地apr,在处理静态资源的时候速度更快,总而言之就是使用本地的apr库提升处理效率。在网上一查,很多人提到了这个问题,解决这个问题其实很简单,但window和linux处理方法不太一样。下面就分别给出解决方法。
在window下启动的时候会提示was not found on the java.library.path: C:\Tools\jdk1.6.0_29\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS …,这个根据每个人的环境不同,可能给出的路径也不太一样,只要把Native library拷贝到上述路径之一即可,Native library是什么呢,网上有提供下载,其实不要那么麻烦,在tomcat的bin目录下就有,文件名是:tcnative-1.dll。例如我把这个文件拷贝到C:\Tools\jdk1.6.0_29\bin下,然后再启动tomcat就没有上述的提示了。
linux下比较复杂一点,因为tomcat包中没有提供编译好的so文件,所以需要自己编译,tomcat发行版中提供了源码,文件为tomcat的bin/tomcat-native.tar.gz,另外编译时候需要依赖APR 1.2、OpenSSL,如果机器上没有安装,可以使用 yum -y install apr-devel openssl-devel 来进行安装。解压tomcat-native.tar.gz后会得到一个tomcat-native-1.1.20-src的目录,Native library的源文件位于tomcat-native-1.1.20-src/jni/native下,进入该目录,执行./configure,可能会看到configure: error: APR could not be located. Please use the –with-apr option.的错误提示,这个时候用–with-apr制定一下apr的位置即可,我使用的是
./configure --with-apr=/usr/bin/apr-1-config
,顺利通过,然后执行 make && make install 编译就算搞定,此时应该可以在/usr/local/apr/lib/下看到一个名为 libtcnative-1.so 的文件,拷贝该文件到tomcat启动时提示的任何一个路径即可。
更多关于apr的信息可以查看官方资料,地址:http://tomcat.apache.org/tomcat-5.5-doc/apr.html