2010年3月25日星期四

[note]Spring MVC接收数组或List参数

客户端:
方法:POST
参数:columnList  Health
          columnList  Sport
          拥有相同的name即可。 

服务器端:

Servlet方式:request.getParameterValues("columnList");可以得到String数组

SpringMVC注解方式:@RequestParameter("columnList") String[] list;           //数组形式
                                 @RequestParameter("columnList") List<String> list;   //List形式
                                 @ModelAttribute MyModel model;                             //模型中带有数组或者List

public class MyModel {
      List<String> list;
      或者String[] list;

      ......
}

[note][转]外部引入CSS 的两种方式link和@import的区别


本质上,这两种方式都是为了加载CSS文件,但还是存在着细微的差别。
  • 老祖宗的差别。link属于XHTML标签,而@import完全是CSS提供的一种方式。link标签除了可以加载CSS外,还可以做很多其它的事情,比如定义RSS,定义rel连接属性等,@import就只能加载CSS了。
  • 加载顺序的差别。当一个页面被加载的时候(就是被浏览者浏览的时候),link引用的CSS会同时被加载,而@import引用的CSS 会等到页面全部被下载完再被加载。所以有时候浏览@import加载CSS的页面时开始会没有样式,然后突然样式会出现,网速慢的时候还挺明显。
  • 兼容性的差别。由于@import是CSS2.1提出的所以老的浏览器不支持,@import只有在IE5以上的才能识别,而link标签无此问题。
  • 使用dom控制样式时的差别。当使用javascript控制dom去改变样式的时候,只能使用link标签,因为@import不是dom可以控制的。
所以,无特殊情况推荐使用link来引入样式,尽量避免使用@import

2010年3月23日星期二

[note][转]javascript 中Object.prototype的几个方法

转自:http://playgoogle.com/?p=198


hasOwnProperty(property)

判断对象是否有某个特定的属性。必须用字符串指定该属性。(例如,o.hasOwnProperty(“name”)),返回布尔值。此方法无法检查该对象的原型链中是否具有该属性;该属性必须是对象本身的一个成员。

如下代码:

var s =”";

alert(s.hasOwnProperty(“split”)); èreturn false

alert(String.prototype.hasOwnProperty(“split”));èreturn true

isPrototypeOf(object)

判断该对象是否为另一个对象的原型。

obj1.isPrototypeOf(obj2);

obj1是一个对象的实例;obj2是另一个将要检查其原型链的对象。原型链可以用来在同一个对象类型的不同实例之间共享功能。如果obj2的原型链中包含obj1,那么isPrototypeOf 方法返回 true。如果obj2不是一个对象或者obj1没有出现在obj2中的原型链中,isPrototypeOf 方法将返回 false

propertyIsEnumerable()

判断给定的属性是否可以用 for…in 语句进行枚举,返回布尔值。

toString()

返回对象的原始字符串表示。对于 Object 对象,ECMA-262 没有定义这个值,所以不同的 ECMAScript 实现具有不同的值。

toLocaleString()

Object中和toString()方法的实现方式一样,但在其他类中有特定的实现,如在DatetoLocaleString() 方法可根据本地时间把 Date 对象转换为字符串,并返回结果。

valueOf()

返回最适合该对象的原始值。对于许多对象,该方法返回的值都与 toString() 的返回值相同。

以上6个方法都是Object.prototype上定义的,ECMAScript 中的所有对象都由Object继承而来,所以在ECMAScript上的所有对象都具有以几个方法。

2010年3月19日星期五

Broadcom Corporation BCM4312 802.11b/g
Intel(R) Pentium(R) Dual  CPU  T2370  @ 1.73GHz
8600M GT
bootsect /nt60 SYS /mbr /force

2010年3月17日星期三

[note]display:inline及与float:left用途详细区分与特征说明

      首先我们要明确,display:inline;与float:left;正确含义。display:inline;(内联)《CSS权威指南》中文字显示:任何不是块级元素的可见元素都是内联元素。其表现的特性是“行布局”形式,这里的“行布局”的意思就是说其表现形式始终以行进行显示。比如,我们设定一个内联元素border-bottom:1px solid #000;时其表现是以每行进行重复,每一行下方都会有一条黑色的细线。如果是块级元素那么所显示的的黑线只会在块的下方出现。

  当然这看起来不像是display:inline;与float:left;的区别所在,但是当理解了float:left;的特性那么我们就清楚到底是怎么回事了。float:left;(左浮动)他使得指定元素脱离普通的文档流而产生的特别的布局特性。并且FLOAT必需应用在块级元素之上,也就是说浮动并不应用于内联标签。或者换句话来说当应用了FLOAT那么这个元素将被指定为块级元素。

  那么我们很清楚了,内联(display:inline;)元素不能设置宽高,因为内联属于行布局,其特性是在一行里进行布局,所以不能被设定宽高。

2010年3月10日星期三

[note]Spring MultipartFile类解决文件上传问题

使用MultipartFile类解决文件的上传十分方便,代码如下:

        @RequestMapping(value = "/member/spaceBackground.do", method = RequestMethod.POST)
public void processSetupBackground(Model model, HttpServletResponse resp, HttpServletRequest req, @RequestParam("fileupload") MultipartFile fileupload) {
try {
String logoName = "logonai.gif";
String filePath = ProjectEnv.getWebappPath() + "/images/";
FileTools.input2File(filePath, fileupload.getInputStream(), logoName, true);  //将上传的文件用input流的方式传到文件logonai.gif中
PrintWriter out = resp.getWriter();
out.print("true");
out.close();
} catch (Exception e) {
e.printStackTrace();
logger.error(e.getMessage(), e);
}
}

[note]真正的JSON格式

以前我写JSON时是这样写的:{name:'zmm',career:'programmer'}

今天发现有两个错误:

第一:JSON官方标准里面说明了不用单引号而必须用双引号。
第二:JSON官方标准里面String必须用双引号包裹,而key使用String表示。

下面是正确的JSON:
{"name":"zmm","career":"programmer"}

如果用Java那么需要放到String里面,如下:

String json = "{\"name\":\"zmm\",\"career\":\"programmer\"}";

使用转义符" \ "。