Java & json

package com.mai.json;

import static org.junit.Assert.assertEquals;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import net.sf.ezmorph.Morpher;
import net.sf.ezmorph.MorpherRegistry;
import net.sf.ezmorph.bean.BeanMorpher;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.util.JSONUtils;

import org.apache.commons.beanutils.PropertyUtils;
import org.junit.Test;

public class JsonLibTest {

    /*
     *  普通類型、List、Collection等都是用JSONArray解析
     *  
     *  Map、自定義類型是用JSONObject解析
     *  可以將Map理解成一個對象,裏面的key/value對可以理解成對象的屬性/屬性值
     *  即{key1:value1,key2,value2......}
     * 
     * 1.JSONObject是一個name:values集合,通過它的get(key)方法取得的是key後對應的value部分(字符串)
     *         通過它的getJSONObject(key)可以取到一個JSONObject,--> 轉換成map,
     *         通過它的getJSONArray(key) 可以取到一個JSONArray ,
     * 
     * 
     */
    
    //一般數組轉換成JSON
    @Test
    public void testArrayToJSON(){
        boolean[] boolArray = new boolean[]{true,false,true};  
        JSONArray jsonArray = JSONArray.fromObject( boolArray );  
        System.out.println( jsonArray );  
        // prints [true,false,true]  
    }
    
    
    //Collection對象轉換成JSON
    @Test
    public void testListToJSON(){
        List list = new ArrayList();  
        list.add( "first" );  
        list.add( "second" );  
        JSONArray jsonArray = JSONArray.fromObject( list );  
        System.out.println( jsonArray );  
        // prints ["first","second"]  
    }
    
    
    //字符串json轉換成json, 根據情況是用JSONArray或JSONObject
    @Test
    public void testJsonStrToJSON(){
        JSONArray jsonArray = JSONArray.fromObject( "['json','is','easy']" );  
        System.out.println( jsonArray );  
        // prints ["json","is","easy"]  
    }
    
    
    //Map轉換成json, 是用jsonObject
    @Test
    public void testMapToJSON(){
        Map map = new HashMap();  
        map.put( "name", "json" );  
        map.put( "bool", Boolean.TRUE );  
        map.put( "int", new Integer(1) );  
        map.put( "arr", new String[]{"a","b"} );  
        map.put( "func", "function(i){ return this.arr[i]; }" );  
          
        JSONObject jsonObject = JSONObject.fromObject( map );  
        System.out.println( jsonObject );  
    }
    
    //複合類型bean轉成成json
    @Test
    public void testBeadToJSON(){
        MyBean bean = new MyBean();
        bean.setId("001");
        bean.setName("銀行卡");
        bean.setDate(new Date());
        
        List cardNum = new ArrayList();
        cardNum.add("農行");
        cardNum.add("工行");
        cardNum.add("建行");
        cardNum.add(new Person("test"));
        
        bean.setCardNum(cardNum);
        
        JSONObject jsonObject = JSONObject.fromObject(bean);
        System.out.println(jsonObject);
        
    }
    
    //普通類型的json轉換成對象
    @Test
    public void testJSONToObject() throws Exception{
        String json = "{name=\"json\",bool:true,int:1,double:2.2,func:function(a){ return a; },array:[1,2]}";  
        JSONObject jsonObject = JSONObject.fromObject( json ); 
        System.out.println(jsonObject);
        Object bean = JSONObject.toBean( jsonObject ); 
        assertEquals( jsonObject.get( "name" ), PropertyUtils.getProperty( bean, "name" ) );  
        assertEquals( jsonObject.get( "bool" ), PropertyUtils.getProperty( bean, "bool" ) );  
        assertEquals( jsonObject.get( "int" ), PropertyUtils.getProperty( bean, "int" ) );  
        assertEquals( jsonObject.get( "double" ), PropertyUtils.getProperty( bean, "double" ) );  
        assertEquals( jsonObject.get( "func" ), PropertyUtils.getProperty( bean, "func" ) );  
        System.out.println(PropertyUtils.getProperty(bean, "name"));
        System.out.println(PropertyUtils.getProperty(bean, "bool"));
        System.out.println(PropertyUtils.getProperty(bean, "int"));
        System.out.println(PropertyUtils.getProperty(bean, "double"));
        System.out.println(PropertyUtils.getProperty(bean, "func"));
        System.out.println(PropertyUtils.getProperty(bean, "array"));
        
        List arrayList = (List)JSONArray.toCollection(jsonObject.getJSONArray("array"));
        for(Object object : arrayList){
            System.out.println(object);
        }
        
    }
    
    
    //將json解析成複合類型對象, 包含List
    @Test
    public void testJSONToBeanHavaList(){
        String json = "{list:[{name:'test1'},{name:'test2'}],map:{test1:{name:'test1'},test2:{name:'test2'}}}";
//        String json = "{list:[{name:'test1'},{name:'test2'}]}";
        Map classMap = new HashMap();
        classMap.put("list", Person.class);
        MyBeanWithPerson diyBean = (MyBeanWithPerson)JSONObject.toBean(JSONObject.fromObject(json),MyBeanWithPerson.class , classMap);
        System.out.println(diyBean);
        
        List list = diyBean.getList();
        for(Object o : list){
            if(o instanceof Person){
                Person p = (Person)o;
                System.out.println(p.getName());
            }
        }
    }
    
    
    //將json解析成複合類型對象, 包含Map
    @Test
    public void testJSONToBeanHavaMap(){
        //把Map看成一個對象
        String json = "{list:[{name:'test1'},{name:'test2'}],map:{testOne:{name:'test1'},testTwo:{name:'test2'}}}";
        Map classMap = new HashMap();
        classMap.put("list", Person.class);
        classMap.put("map", Map.class);
        //使用暗示,直接將json解析爲指定自定義對象,其中List完全解析,Map沒有完全解析
        MyBeanWithPerson diyBean = (MyBeanWithPerson)JSONObject.toBean(JSONObject.fromObject(json),MyBeanWithPerson.class , classMap);
        System.out.println(diyBean);
        
        System.out.println("do the list release");
        List<Person> list = diyBean.getList();
        for(Person o : list){
            Person p = (Person)o;
            System.out.println(p.getName());
        }
        
        System.out.println("do the map release");
        
        //先往註冊器中註冊變換器,需要用到ezmorph包中的類
        MorpherRegistry morpherRegistry = JSONUtils.getMorpherRegistry();
        Morpher dynaMorpher = new BeanMorpher( Person.class,  morpherRegistry);  
        morpherRegistry.registerMorpher( dynaMorpher );  
        
        
        Map map = diyBean.getMap();
        /*這裏的map沒進行類型暗示,故按默認的,裏面存的爲net.sf.ezmorph.bean.MorphDynaBean類型的對象*/
        System.out.println(map);
      /*輸出:
        {testOne=net.sf.ezmorph.bean.MorphDynaBean@f73c1[
          {name=test1}
        ], testTwo=net.sf.ezmorph.bean.MorphDynaBean@186c6b2[
          {name=test2}
        ]}
      */
        List<Person> output = new ArrayList();  
        for( Iterator i = map.values().iterator(); i.hasNext(); ){  
            //使用註冊器對指定DynaBean進行對象變換
           output.add( (Person)morpherRegistry.morph( Person.class, i.next() ) );  
        }  
        
        for(Person p : output){
            System.out.println(p.getName());
        /*輸出:
          test1
          test2
        */
        }
        
    }
    
    
    
}
1、DTO:Data Transfer Object,數據傳送對象

2、對於日期格式的問題,也已經處理

3、json-lib-2.2.2-jdk13.jar (2.1在日期數組 json->java有問題)

工具類JsonUtil代碼如下:

Java代碼 
public class JsonUtil {   
  
    /**頁面傳至後臺時,json數據在request的參數名稱*/  
    public final static String JSON_ATTRIBUTE = "json";   
    public final static String JSON_ATTRIBUTE1 = "json1";   
    public final static String JSON_ATTRIBUTE2 = "json2";   
    public final static String JSON_ATTRIBUTE3 = "json3";   
    public final static String JSON_ATTRIBUTE4 = "json4";   
       
    /**  
     * 從一個JSON 對象字符格式中得到一個java對象,形如:  
     * {"id" : idValue, "name" : nameValue, "aBean" : {"aBeanId" : aBeanIdValue, ...}}  
     * @param object  
     * @param clazz  
     * @return  
     */  
    public static Object getDTO(String jsonString, Class clazz){   
        JSONObject jsonObject = null;   
        try{   
            setDataFormat2JAVA();    
            jsonObject = JSONObject.fromObject(jsonString);   
        }catch(Exception e){   
            e.printStackTrace();   
        }   
        return JSONObject.toBean(jsonObject, clazz);   
    }   
       
    /**  
     * 從一個JSON 對象字符格式中得到一個java對象,其中beansList是一類的集合,形如:  
     * {"id" : idValue, "name" : nameValue, "aBean" : {"aBeanId" : aBeanIdValue, ...},  
     * beansList:[{}, {}, ...]}  
     * @param jsonString  
     * @param clazz  
     * @param map 集合屬性的類型 (key : 集合屬性名, value : 集合屬性類型class) eg: ("beansList" : Bean.class)  
     * @return  
     */  
    public static Object getDTO(String jsonString, Class clazz, Map map){   
        JSONObject jsonObject = null;   
        try{   
            setDataFormat2JAVA();    
            jsonObject = JSONObject.fromObject(jsonString);   
        }catch(Exception e){   
            e.printStackTrace();   
        }   
        return JSONObject.toBean(jsonObject, clazz, map);   
    }   
       
    /**  
     * 從一個JSON數組得到一個java對象數組,形如:  
     * [{"id" : idValue, "name" : nameValue}, {"id" : idValue, "name" : nameValue}, ...]  
     * @param object  
     * @param clazz  
     * @return  
     */  
    public static Object[] getDTOArray(String jsonString, Class clazz){   
        setDataFormat2JAVA();   
        JSONArray array = JSONArray.fromObject(jsonString);   
        Object[] obj = new Object[array.size()];   
        for(int i = 0; i < array.size(); i++){   
            JSONObject jsonObject = array.getJSONObject(i);   
            obj[i] = JSONObject.toBean(jsonObject, clazz);   
        }   
        return obj;   
    }   
       
    /**  
     * 從一個JSON數組得到一個java對象數組,形如:  
     * [{"id" : idValue, "name" : nameValue}, {"id" : idValue, "name" : nameValue}, ...]  
     * @param object  
     * @param clazz  
     * @param map  
     * @return  
     */  
    public static Object[] getDTOArray(String jsonString, Class clazz, Map map){   
        setDataFormat2JAVA();   
        JSONArray array = JSONArray.fromObject(jsonString);   
        Object[] obj = new Object[array.size()];   
        for(int i = 0; i < array.size(); i++){   
            JSONObject jsonObject = array.getJSONObject(i);   
            obj[i] = JSONObject.toBean(jsonObject, clazz, map);   
        }   
        return obj;   
    }   
       
    /**  
     * 從一個JSON數組得到一個java對象集合  
     * @param object  
     * @param clazz  
     * @return  
     */  
    public static List getDTOList(String jsonString, Class clazz){   
        setDataFormat2JAVA();   
        JSONArray array = JSONArray.fromObject(jsonString);   
        List list = new ArrayList();   
        for(Iterator iter = array.iterator(); iter.hasNext();){   
            JSONObject jsonObject = (JSONObject)iter.next();   
            list.add(JSONObject.toBean(jsonObject, clazz));   
        }   
        return list;   
    }   
       
    /**  
     * 從一個JSON數組得到一個java對象集合,其中對象中包含有集合屬性  
     * @param object  
     * @param clazz  
     * @param map 集合屬性的類型  
     * @return  
     */  
    public static List getDTOList(String jsonString, Class clazz, Map map){   
        setDataFormat2JAVA();   
        JSONArray array = JSONArray.fromObject(jsonString);   
        List list = new ArrayList();   
        for(Iterator iter = array.iterator(); iter.hasNext();){   
            JSONObject jsonObject = (JSONObject)iter.next();   
            list.add(JSONObject.toBean(jsonObject, clazz, map));   
        }   
        return list;   
    }   
       
    /**  
     * 從json HASH表達式中獲取一個map,該map支持嵌套功能  
     * 形如:{"id" : "johncon", "name" : "小強"}  
     * 注意commons-collections版本,必須包含org.apache.commons.collections.map.MultiKeyMap  
     * @param object  
     * @return  
     */  
    public static Map getMapFromJson(String jsonString) {   
        setDataFormat2JAVA();   
        JSONObject jsonObject = JSONObject.fromObject(jsonString);   
        Map map = new HashMap();   
        for(Iterator iter = jsonObject.keys(); iter.hasNext();){   
            String key = (String)iter.next();   
            map.put(key, jsonObject.get(key));   
        }   
        return map;   
    }   
       
    /**  
     * 從json數組中得到相應java數組  
     * json形如:["123", "456"]  
     * @param jsonString  
     * @return  
     */  
    public static Object[] getObjectArrayFromJson(String jsonString) {   
        JSONArray jsonArray = JSONArray.fromObject(jsonString);   
        return jsonArray.toArray();   
    }   
  
  
    /**  
     * 把數據對象轉換成json字符串  
     * DTO對象形如:{"id" : idValue, "name" : nameValue, ...}  
     * 數組對象形如:[{}, {}, {}, ...]  
     * map對象形如:{key1 : {"id" : idValue, "name" : nameValue, ...}, key2 : {}, ...}  
     * @param object  
     * @return  
     */  
    public static String getJSONString(Object object) throws Exception{   
        String jsonString = null;   
        //日期值處理器   
        JsonConfig jsonConfig = new JsonConfig();   
        jsonConfig.registerJsonValueProcessor(java.util.Date.class, new JsonDateValueProcessor());   
        if(object != null){   
            if(object instanceof Collection || object instanceof Object[]){   
                jsonString = JSONArray.fromObject(object, jsonConfig).toString();   
            }else{   
                jsonString = JSONObject.fromObject(object, jsonConfig).toString();   
            }   
        }   
        return jsonString == null ? "{}" : jsonString;   
    }   
       
    private static void setDataFormat2JAVA(){   
        //設定日期轉換格式   
        JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(new String[] {"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss"}));   
    }   
       
    public static void main(String[] arg) throws Exception{   
        String s = "{status : 'success'}";   
        System.out.println(" object : " + JsonUtil.getJSONString(s));   
    }   
}  

public class JsonUtil {

 /**頁面傳至後臺時,json數據在request的參數名稱*/
 public final static String JSON_ATTRIBUTE = "json";
 public final static String JSON_ATTRIBUTE1 = "json1";
 public final static String JSON_ATTRIBUTE2 = "json2";
 public final static String JSON_ATTRIBUTE3 = "json3";
 public final static String JSON_ATTRIBUTE4 = "json4";
 
 /**
  * 從一個JSON 對象字符格式中得到一個java對象,形如:
  * {"id" : idValue, "name" : nameValue, "aBean" : {"aBeanId" : aBeanIdValue, ...}}
  * @param object
  * @param clazz
  * @return
  */
 public static Object getDTO(String jsonString, Class clazz){
  JSONObject jsonObject = null;
  try{
   setDataFormat2JAVA(); 
   jsonObject = JSONObject.fromObject(jsonString);
  }catch(Exception e){
   e.printStackTrace();
  }
  return JSONObject.toBean(jsonObject, clazz);
 }
 
 /**
  * 從一個JSON 對象字符格式中得到一個java對象,其中beansList是一類的集合,形如:
  * {"id" : idValue, "name" : nameValue, "aBean" : {"aBeanId" : aBeanIdValue, ...},
  * beansList:[{}, {}, ...]}
  * @param jsonString
  * @param clazz
  * @param map 集合屬性的類型 (key : 集合屬性名, value : 集合屬性類型class) eg: ("beansList" : Bean.class)
  * @return
  */
 public static Object getDTO(String jsonString, Class clazz, Map map){
  JSONObject jsonObject = null;
  try{
   setDataFormat2JAVA(); 
   jsonObject = JSONObject.fromObject(jsonString);
  }catch(Exception e){
   e.printStackTrace();
  }
  return JSONObject.toBean(jsonObject, clazz, map);
 }
 
 /**
  * 從一個JSON數組得到一個java對象數組,形如:
  * [{"id" : idValue, "name" : nameValue}, {"id" : idValue, "name" : nameValue}, ...]
  * @param object
  * @param clazz
  * @return
  */
 public static Object[] getDTOArray(String jsonString, Class clazz){
  setDataFormat2JAVA();
  JSONArray array = JSONArray.fromObject(jsonString);
  Object[] obj = new Object[array.size()];
  for(int i = 0; i < array.size(); i++){
   JSONObject jsonObject = array.getJSONObject(i);
   obj[i] = JSONObject.toBean(jsonObject, clazz);
  }
  return obj;
 }
 
 /**
  * 從一個JSON數組得到一個java對象數組,形如:
  * [{"id" : idValue, "name" : nameValue}, {"id" : idValue, "name" : nameValue}, ...]
  * @param object
  * @param clazz
  * @param map
  * @return
  */
 public static Object[] getDTOArray(String jsonString, Class clazz, Map map){
  setDataFormat2JAVA();
  JSONArray array = JSONArray.fromObject(jsonString);
  Object[] obj = new Object[array.size()];
  for(int i = 0; i < array.size(); i++){
   JSONObject jsonObject = array.getJSONObject(i);
   obj[i] = JSONObject.toBean(jsonObject, clazz, map);
  }
  return obj;
 }
 
 /**
  * 從一個JSON數組得到一個java對象集合
  * @param object
  * @param clazz
  * @return
  */
 public static List getDTOList(String jsonString, Class clazz){
  setDataFormat2JAVA();
  JSONArray array = JSONArray.fromObject(jsonString);
  List list = new ArrayList();
  for(Iterator iter = array.iterator(); iter.hasNext();){
   JSONObject jsonObject = (JSONObject)iter.next();
   list.add(JSONObject.toBean(jsonObject, clazz));
  }
  return list;
 }
 
 /**
  * 從一個JSON數組得到一個java對象集合,其中對象中包含有集合屬性
  * @param object
  * @param clazz
  * @param map 集合屬性的類型
  * @return
  */
 public static List getDTOList(String jsonString, Class clazz, Map map){
  setDataFormat2JAVA();
  JSONArray array = JSONArray.fromObject(jsonString);
  List list = new ArrayList();
  for(Iterator iter = array.iterator(); iter.hasNext();){
   JSONObject jsonObject = (JSONObject)iter.next();
   list.add(JSONObject.toBean(jsonObject, clazz, map));
  }
  return list;
 }
 
 /**
  * 從json HASH表達式中獲取一個map,該map支持嵌套功能
  * 形如:{"id" : "johncon", "name" : "小強"}
  * 注意commons-collections版本,必須包含org.apache.commons.collections.map.MultiKeyMap
  * @param object
  * @return
  */
 public static Map getMapFromJson(String jsonString) {
  setDataFormat2JAVA();
        JSONObject jsonObject = JSONObject.fromObject(jsonString);
        Map map = new HashMap();
        for(Iterator iter = jsonObject.keys(); iter.hasNext();){
            String key = (String)iter.next();
            map.put(key, jsonObject.get(key));
        }
        return map;
    }
 
 /**
     * 從json數組中得到相應java數組
     * json形如:["123", "456"]
     * @param jsonString
     * @return
     */
    public static Object[] getObjectArrayFromJson(String jsonString) {
        JSONArray jsonArray = JSONArray.fromObject(jsonString);
        return jsonArray.toArray();
    }


 /**
  * 把數據對象轉換成json字符串
  * DTO對象形如:{"id" : idValue, "name" : nameValue, ...}
  * 數組對象形如:[{}, {}, {}, ...]
  * map對象形如:{key1 : {"id" : idValue, "name" : nameValue, ...}, key2 : {}, ...}
  * @param object
  * @return
  */
 public static String getJSONString(Object object) throws Exception{
  String jsonString = null;
  //日期值處理器
  JsonConfig jsonConfig = new JsonConfig();
  jsonConfig.registerJsonValueProcessor(java.util.Date.class, new JsonDateValueProcessor());
  if(object != null){
   if(object instanceof Collection || object instanceof Object[]){
    jsonString = JSONArray.fromObject(object, jsonConfig).toString();
   }else{
    jsonString = JSONObject.fromObject(object, jsonConfig).toString();
   }
  }
  return jsonString == null ? "{}" : jsonString;
 }
 
 private static void setDataFormat2JAVA(){
  //設定日期轉換格式
  JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(new String[] {"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss"}));
 }
 
 public static void main(String[] arg) throws Exception{
  String s = "{status : 'success'}";
  System.out.println(" object : " + JsonUtil.getJSONString(s));
 }
} 

對於java對象轉換成json數據格式時,要對日期格式化常用格式,類:JsonDateValueProcessor

Java代碼 
import java.text.SimpleDateFormat;   
import java.util.Date;   
  
import net.sf.json.JsonConfig;   
import net.sf.json.processors.JsonValueProcessor;   
  
/*  
 * @author johncon  
 * 創建日期 2008-9-10  
 * json日期值處理器  
 */  
public class JsonDateValueProcessor implements JsonValueProcessor {   
  
    private String format = "yyyy-MM-dd HH:mm:ss";   
  
    public JsonDateValueProcessor() {   
  
    }   
  
    public JsonDateValueProcessor(String format) {   
        this.format = format;   
    }   
  
    public Object processArrayValue(Object value, JsonConfig jsonConfig) {   
        return process(value, jsonConfig);   
    }   
  
    public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) {   
        return process(value, jsonConfig);   
    }   
       
    private Object process( Object value, JsonConfig jsonConfig ) {   
        if (value instanceof Date) {   
            String str = new SimpleDateFormat(format).format((Date) value);   
            return str;   
        }   
        return value == null ? null : value.toString();   
    }   
  
    public String getFormat() {   
        return format;   
    }   
  
    public void setFormat(String format) {   
        this.format = format;   
    }   
  
}  

import java.text.SimpleDateFormat;
import java.util.Date;

import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;

/*
 * @author johncon
 * 創建日期 2008-9-10
 * json日期值處理器
 */
public class JsonDateValueProcessor implements JsonValueProcessor {

 private String format = "yyyy-MM-dd HH:mm:ss";

 public JsonDateValueProcessor() {

 }

 public JsonDateValueProcessor(String format) {
  this.format = format;
 }

 public Object processArrayValue(Object value, JsonConfig jsonConfig) {
  return process(value, jsonConfig);
 }

 public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) {
  return process(value, jsonConfig);
 }
 
 private Object process( Object value, JsonConfig jsonConfig ) {
  if (value instanceof Date) {
   String str = new SimpleDateFormat(format).format((Date) value);
   return str;
  }
  return value == null ? null : value.toString();
 }

 public String getFormat() {
  return format;
 }

 public void setFormat(String format) {
  this.format = format;
 }

} 

對於對象中有明確類型的對象屬性,可不管;但對象中有集合屬性的,由於類型不明確,所以要先明確類型:

Java代碼 
String jsonString = request.getParameter("json");   
//增加對象中的集合屬性的類型以及對象元素中的對象屬性的集合屬性的類型   
Map clazzMap = new HashMap();   
//secondItems是FirstDTO裏的集合屬性   
clazzMap.put("secondItems", SecondDTO.class);   
//thirdItems是SecondDTO裏的集合屬性   
clazzMap.put("thirdItems", ThirdDTO.class);   
FirstDTO firstDTO = (FirstDTO)JsonUtil.getDTO(jsonString, FirstDTO.class, clazzMap); 

 

Struts2的XML配置說明

<result type="json">
	<!-- 這裏指定將被Struts2序列化的屬性,該屬性在action中必須有對應的getter方法 -->
	<!-- 默認將會序列所有有返回值的getter方法的值,而無論該方法是否有對應屬性 -->
	<param name="root">dataMap</param>
	<!-- 指定是否序列化空的屬性 -->
	<param name="excludeNullProperties">true</param>
	<!-- 這裏指定將序列化dataMap中的那些屬性 -->
	<param name="includeProperties">userList.*</param>
	<!-- 這裏指定將要從dataMap中排除那些屬性,這些排除的屬性將不被序列化,一般不與上邊的參數配置同時出現 -->
	<param name="excludeProperties">SUCCESS</param>
</result>

 

 

<!-- 封裝所以的get開頭的方法 --> 
<result type="json" name="user"> 
</result> 

<!-- 只包含user.id屬性 --> 
<result type="json" name="user"> 
    <param name="includeProperties">               
        user\.id,

        list\[\d+\]\.Id,   list\[\d+\]\.userName                  //正則表達式(以逗號隔開)
    </param> 
</result> 

<!-- 不包含user屬性 --> 
<result type="json" name="list"> 
    <param name="excludeProperties">               
        user 
    </param> 
</result> 

<!-- 根對象只包含user --> 
<result type="json">  
    <param name="root">  
        user 
    </param>  
</result>

<!-- includeProperties 直接返回對象的json數據,前臺不需要eval轉換,<param name="root">result</param>則不同,需要前臺進行eval轉換 -->

<!-- "root"對象中父類的field(屬性)不會(會?) 默認存放到 JSON數據中,如果不想這樣做,需要在配置時指定 ignoreHierarchy 爲 false:  --> 
<result type="json">  
    <pa



我們只要輸出person對象的name屬性值,配置如下

1<result type="json">
2<param name="root">person.name</param>
3</result>

 

  5.2. excludeNullProperties 參數:表示是否去掉空值, 默認值是false,如果設置爲true會自動將爲空的值過濾,只輸出不爲空的值。

1<result type="json">   
2    <param name="excludeNullProperties">true</param>   
3</result>   
4

 

  5.3. ignoreHierarchy 參數:表示是否忽略等級,也就是繼承關係,比如:TestAction繼承於BaseAction,那麼TestAction中返回的json字符串默認是不會包含父類BaseAction的屬性值,ignoreHierarchy值默認爲true,設置爲false後會將父類和子類的屬性一起返回。

1<result type="json">   
2    <param name="ignoreHierarchy">false</param>   
3</result>   

 

  5.4. includeProperties 參數:輸出結果中需要包含的屬性值,這裏正則表達式和屬性名匹配,可以用“,”分割填充多個正則表達式。

   如:輸出person的所有屬性 

1<result type="json">   
2    <param name="includeProperties">person.*, person\.name</param>   
3</result>   

 

<!-- 返回的是一個user對象 user對象(id,name,pass) -->
14 <result name="findByDarkName" type="json">
15 <!-- param參數的配置,includeProperties -->
16 <param name="includeProperties">
17 list\[\d+\]\.id, list\[\d+\]\.name, list\[\d+\]\.pass
18 </param>
19 </result>


Struts2+JQuery+Json及JQuery相關插件的例子

 

注意事項:

  1.開發時,應將工程及相應的頁面數據庫編碼均設爲:utf8解決亂碼問題;

  2.當前開發版本爲struts2.1.8,不同的struts2版本會有不同的jar包需要引入,具體見readme.txt

  3.autocomplete插件不是很完善,尚不能處理json數據;彈出層框架只針對圖片(可修改格式適應其它形式)

readme.txt:

             

  1. 1.JQuery的Ajax實現並與struts2的結合   
  2. 2.配置過程:   
  3.   a.新建web項目;   
  4.   b.修改web.xml文件   
  5.   c.在src下添加struts.xml文件,添加jar包支持:freemarker.jar ognl.jar struts2-core.jar commons-fileupload.jar    
  6.       commons-io.jar xwork-core-2.1.6.jar(這個包加上版本號,是因爲下文要提到它),注意jar包支持   
  7.       這六個包是struts必須依賴的jar包   
  8.   d.配置jsp文件,在jsp裏面添加jquery支持   
  9.   e.配置action   
  10.   f   ( 一)在struts2.1.6之前的版本:   
  11.         添加相應的json包:json-lib.jar jsonplugin.jar 這裏要注意很重要的一點,因爲json大量引用了Apache commons的包,所以這裏要一併加入,   
  12.        需要的commons包共4個,除了commons的包外,還需要引入一個 ezmorph的包,所以這一步一共要引入7個包,列出如下:   
  13.        commons-collections.jar commons-lang.jar   
  14.        commons-beanutils.jar commons-logging.jar ezmorph.jar 再加上json的兩個包共七個   
  15.        (二)struts2.1.6,添加jsonplugin0.34或者jsonplugin0.7   
  16.        (三)struts2.1.8則添加json-lib-2.2.3.jar,struts2-json-plugin,struts2-junit-plugin   
  17.           
  18.           
  19. 3.插件使用:    
  20.     1.validation插件:詳見table-validation.jsp,主要爲引入一個jquery.validate.js,獲取相應的屬性名來進行驗證;   
  21.     2.tablesort插件:目前用的是兼容中文的官網版本,一是可以實現自動排序,二是支持中文;要注意在table當中的格式,這點很重要   
  22.     3.tablesortpager插件   
  23.        
  24.        
  25.        
  26.  JQuery與Json結合的一些注意事項:   
  27.  1.$.get(url,data,function(data){   
  28.     eval(data);   
  29.     })   
  30.   eval(data)將數據轉換爲js對象;   
  31.   實際上如果返回的json對象,可通過將參數直接命名爲json即可,如下   
  32.   $.get(url.data,function(data){},"json")   
  33.   
  34. 2.取json屬性時,儘量用中括號方式,原因是如果有數字屬性會發生不識別的現象   
  35.   eg:var a=obj["31001"];   
  36.      //obj.31001則可能出錯   
  37.    解決辦法有其它方式:比如將屬性值31001改爲s31001   
  38.       
  39.  3.亂碼問題:   
  40.     在struts1.2中,通過設置表頭的編碼來解決亂碼問題,注意對於xml和json,要分別設置爲text/xml和text/json   
  41.         eg:response.setContentType("text/json; charset=utf-8");   

 

1.struts.xml配置:

             

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!-- 指定Struts 2配置文件的DTD信息 -->  
  3. <!DOCTYPE struts PUBLIC   
  4.         "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"   
  5.         "http://struts.apache.org/dtds/struts-2.0.dtd">  
  6. <struts>  
  7.      <constant name="struts.i18n.encoding" value="utf-8"></constant>  
  8.     <package name="S2SHJQuery" extends="json-default">  
  9.         <action name="show" class="action.ShowAction">  
  10.             <result type="json"/>  
  11.         </action>  
  12.     </package>  
  13. </struts>  

 

2.ShowAction.java配置 :

             

  1. package action;   
  2.   
  3. import java.util.ArrayList;   
  4. import java.util.List;   
  5. import java.util.Map;   
  6.   
  7. import org.apache.struts2.json.annotations.JSON;   
  8.   
  9. import com.opensymphony.xwork2.ActionSupport;   
  10. public class ShowAction extends ActionSupport {   
  11.     private String testvalue;   
  12.     private String result;   
  13.     private List<String> list;   
  14.     private List<User> userlist;   
  15.     private User user;   
  16.     private Map<String, User> map;   
  17.     private String[] autoarray;   
  18.     public String[] getAutoarray() {   
  19.         return autoarray;   
  20.     }   
  21.     public void setAutoarray(String[] autoarray) {   
  22.         this.autoarray = autoarray;   
  23.     }   
  24.     @JSON(serialize=false)   
  25.     public Map<String, User> getMap() {   
  26.         return map;   
  27.     }   
  28.     public void setMap(Map<String, User> map) {   
  29.         this.map = map;   
  30.     }   
  31.     @JSON(serialize=false)   
  32.     public User getUser() {   
  33.         return user;   
  34.     }   
  35.     public void setUser(User user) {   
  36.         this.user = user;   
  37.     }   
  38.     @JSON(serialize=false)   
  39.     public List<User> getUserlist() {   
  40.         return userlist;   
  41.     }   
  42.     public void setUserlist(List<User> userlist) {   
  43.         this.userlist = userlist;   
  44.     }   
  45.     @JSON(serialize=false)   
  46.     public List<String> getList() {   
  47.         return list;   
  48.     }   
  49.     public void setList(List<String> list) {   
  50.         this.list = list;   
  51.     }   
  52.        
  53.     public void setTestvalue(String testvalue) {   
  54.         this.testvalue = testvalue;   
  55.     }   
  56.     @JSON(serialize=false)   
  57.     public String getTestvalue() {   
  58.         return testvalue;   
  59.     }   
  60.     @JSON(serialize=false)   
  61.     public String getResult() {   
  62.         return result;   
  63.     }   
  64.     public void setResult(String result) {   
  65.         this.result = result;   
  66.     }   
  67.     @Override  
  68.     public String execute() throws Exception {   
  69.         // TODO Auto-generated method stub   
  70.         System.out.println("test is ok: "+testvalue);   
  71.         //1.????string   
  72.         /*int i=9;  
  73.          //result=""+i+"";  
  74.          result="中國";*/  
  75.         //2.list?   
  76.         /*list=new ArrayList<String>();  
  77.         list.add("allen");  
  78.         list.add("中國");  
  79.         list.add("adc");*/  
  80.         //3.list?а?User   
  81.         /*userlist=new ArrayList<User>();  
  82.         User user1=new User();  
  83.         user1.setPassword(1);  
  84.         user1.setUsername("username1");  
  85.         User user2=new User();  
  86.         user2.setPassword(2);  
  87.         user2.setUsername("username2");  
  88.         User user3=new User();  
  89.         user3.setPassword(3);  
  90.         user3.setUsername("username3");  
  91.         userlist.add(user1);  
  92.         userlist.add(user2);  
  93.         userlist.add(user3);*/  
  94.         //4.User???????   
  95.         /*user=new User();  
  96.         user.setPassword(1);  
  97.         String username="中國";  
  98.         user.setUsername(username);  
  99.         System.out.println(user.getUsername());  
  100.          */  
  101.         //5.map????   
  102.         /*map=new HashMap<String, User>();  
  103.         User user1=new User();  
  104.         user1.setPassword(1);  
  105.         user1.setUsername("username1");  
  106.         User user2=new User();  
  107.         user2.setPassword(2);  
  108.         user2.setUsername("username2");  
  109.         User user3=new User();  
  110.         user3.setPassword(3);  
  111.         user3.setUsername("username3");  
  112.         map.put("s1",user1 );  
  113.         map.put("s2",user2 );  
  114.         map.put("s3",user3 );*/  
  115.         /*map=new HashMap<String, String>();//??????String,string???  
  116.         map.put("s1","user1");  
  117.         map.put("s2","user2");  
  118.         map.put("s3","user3");*/  
  119.         //7.直接傳遞數祖   
  120.         autoarray=new String[3];   
  121.         autoarray[0]="a";   
  122.         autoarray[1]="b";   
  123.         autoarray[2]="c";   
  124.            
  125.         return SUCCESS;   
  126.     }   
  127.   
  128.        
  129. }  

 

3.show.jsp配置:

                    

  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>   
  2. <%   
  3. String path = request.getContextPath();   
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";   
  5. %>   
  6.   
  7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">   
  8. <html>   
  9.   <head>   
  10.   <mce:script type="text/javascript" src="/S2SHJQuery/js/jquery.js" mce_src="S2SHJQuery/js/jquery.js"></mce:script>   
  11.     <base href="<%=basePath%>">   
  12.     <title>struts2+jquery+json</title>   
  13. <mce:script type="text/javascript"><!--   
  14.     //1.struts2+jquery+json單獨傳遞單個參數   
  15.     /*$(function(){  
  16.             $("#jquerytest").click(function(){  
  17.             var params={testvalue:$('#test').val()};  
  18.                 $.ajax({  
  19.                         url:"show.action",  
  20.                         data:params,  
  21.                         type:'post',  
  22.                         dataType:'json',  
  23.                         success:function(data){  
  24.                         //data += decodeURI(data.shtml) ;  
  25.                             alert("成功");  
  26.                             alert(data.result);  
  27.                             },  
  28.                         error:  function(){  
  29.                                 alert("失敗");  
  30.                             }                     
  31.                 })  
  32.             })  
  33.         })*/  
  34.      //2.jquery單獨傳遞含單個參數的list   
  35.      /*$(function(){  
  36.             $("#jquerytest").click(function(){  
  37.             var params={testvalue:$('#test').val()};  
  38.                 $.ajax({  
  39.                         url:"show.action",  
  40.                         data:params,  
  41.                         type:'post',  
  42.                         dataType:'json',  
  43.                         success:function(data){  
  44.                         var jsonobject=data.list;  
  45.                             for(var j=0;j<jsonobject.length;j++)  
  46.                                     {  
  47.                                         alert(jsonobject[j]);  
  48.                                     }  
  49.                             },  
  50.                         error:  function(){  
  51.                                 alert("失敗");  
  52.                             }                     
  53.                 })  
  54.             })  
  55.         })*/  
  56.      //3.jquery單獨傳遞含對象類型User的list   
  57.      $(function(){   
  58.             $("#jquerytest").click(function(){   
  59.             var params={testvalue:$('#test').val()};   
  60.                 $.ajax({   
  61.                         url:"show.action",   
  62.                         data:params,   
  63.                         type:'post',   
  64.                         dataType:'json',   
  65.                         success:function(data){   
  66.                         var jsonobject=data.userlist;   
  67.                             /*for(var j=0;j<jsonobject.length;j++)  
  68.                                     {  
  69.                                         alert(jsonobject[j].username);  
  70.                                         alert(jsonobject[j].password);  
  71.                                     }  
  72.                             */  
  73.                             $.each(jsonobject,function(key,value){   
  74.                                     alert(key+" "+value.username);   
  75.                                     alert(key+" "+value.password);   
  76.                                 })     
  77.                                 }                  
  78.                                 ,   
  79.                         error:  function(){   
  80.                                 alert("失敗");   
  81.                             }                      
  82.                 })   
  83.             })   
  84.         })   
  85.      //4.jquery單獨傳遞User對象類型   
  86.     /*$(function(){  
  87.             $("#jquerytest").click(function(){  
  88.             var params={testvalue:$('#test').val()};  
  89.                 $.ajax({  
  90.                         url:"show.action",  
  91.                         data:params,  
  92.                         type:'post',  
  93.                         dataType:'json',  
  94.                         contentType: "application/x-www-form-urlencoded; charset=UTF-8",  
  95.                         success:function(data){  
  96.                         var jsonobject=data.user;  
  97.                                         alert(jsonobject.username);  
  98.                             },  
  99.                         error:  function(){  
  100.                                 alert("失敗");  
  101.                             }                     
  102.                 })  
  103.             })  
  104.         })*/  
  105.      //5.jquery傳遞含User對象類型的map類型   
  106.      /*$(function(){  
  107.             $("#jquerytest").click(function(){  
  108.             var params={testvalue:$('#test').val()};  
  109.                 $.ajax({  
  110.                         url:"show.action",  
  111.                         data:params,  
  112.                         type:'post',  
  113.                         dataType:'json',  
  114.                         success:function(data){  
  115.                         var jsonobject=data.map;  
  116.                             alert(data.map.s1.username);//一步一步獲取值  
  117.                             $.each(data.map,function(key,value){  
  118.                                     alert(key+": "+value.username);  
  119.                                 })  
  120.                             },  
  121.                         error:  function(){  
  122.                                 alert("失敗");  
  123.                             }                     
  124.                 })  
  125.             })  
  126.         })*/  
  127. // --></mce:script>   
  128.   </head>   
  129.   <body>   
  130.   <form>   
  131.   <input type="button" value="JQuery"  id="jquerytest"><br>   
  132.   <input type="text" value="美國" name="test" id="test">   
  133.   </form>   
  134.   </body>   
  135. </html>  
  

 

4.tableopen.jsp彈出層插件:

              

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">  
  3.   
  4. <head>  
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  6. <title>Thickbox Plus - Download by http://www.codefans.net</title>  
  7.   
  8. <mce:style type="text/css" media="all"><!--  
  9. @import "css/global.css";  
  10. --></mce:style><style type="text/css" media="all" mce_bogus="1">@import "css/global.css";</style>  
  11. <mce:script src="/S2SHJQuery/js/jquery.js" mce_src="S2SHJQuery/js/jquery.js" type="text/javascript"></mce:script>  
  12. <mce:script src="/S2SHJQuery/lib/thickbox_plus.js" mce_src="S2SHJQuery/lib/thickbox_plus.js" type="text/javascript"></mce:script>  
  13.   
  14. </head>  
  15. <body>  
  16.     <div id="contentPad">  
  17.     <h1>Thickbox Plus</h1>  
  18.     <div>  
  19.         <a href="images/image1.jpg" mce_href="images/image1.jpg" title="Sample caption" class="thickbox"><img src="images/image1_t.jpg" mce_src="images/image1_t.jpg" alt="Image 1" /></a>  
  20.              
  21.         <a href="images/image2.jpg" mce_href="images/image2.jpg" title="Another sample caption" class="thickbox"><img src="images/image2_t.jpg" mce_src="images/image2_t.jpg" alt="Image 2"/></a>  
  22.     </div>  
  23.     </div>  
  24. </body>  
  25. </html>  

 

5.tablesorter.jsp排序層插件:

             

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%   
  3.     String path = request.getContextPath();   
  4.     String basePath = request.getScheme() + "://"   
  5.             + request.getServerName() + ":" + request.getServerPort()   
  6.             + path + "/";   
  7. %>  
  8.   
  9. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  10. <html>  
  11.     <head>  
  12.         <base href="<%=basePath%>">  
  13.   
  14.         <title>列表排序</title>  
  15.         <link rel="stylesheet" type="text/css" media="screen"  
  16.             href="css/screen.css" />  
  17.         <mce:script src="/S2SHJQuery/js/jquery.js" mce_src="S2SHJQuery/js/jquery.js"  
  18.             type="text/javascript"></mce:script>  
  19.         <mce:script  
  20.             src="/S2SHJQuery/lib/jquery.tablesorter.js"  
  21.             type="text/javascript"></mce:script>  
  22.         <mce:script type="text/javascript"><!--   
  23.         $(document).ready(function() {   
  24.                 $("#userList").tablesorter({sortList: [ [2,1]]} );//也可通過傳遞參數來實現   
  25.             });    
  26.        
  27. // --></mce:script>  
  28.     </head>  
  29.     <body>  
  30.         This is my JSP page.   
  31.         <br>  
  32.         <table id="userList">  
  33.     <thead>  
  34.         <tr>  
  35.             <th>Name</th>  
  36.             <th>Sex</th>  
  37.             <th>old</th>  
  38.         </tr>  
  39.     </thead>  
  40.     <tbody>  
  41.     <tr>  
  42.             <td>李四</td>  
  43.             <td></td>  
  44.             <td>14</td>  
  45.         </tr>  
  46.         <tr>  
  47.             <td>張三</td>  
  48.             <td></td>  
  49.             <td>50</td>  
  50.         </tr>  
  51.         <tr>  
  52.             <td>趙五</td>  
  53.             <td>Sex</td>  
  54.             <td>60</td>  
  55.         </tr>  
  56.         <tr>  
  57.             <td>麗麗</td>  
  58.             <td></td>  
  59.             <td>18</td>  
  60.         </tr>  
  61.         <tr>  
  62.             <td>蟈蟈</td>  
  63.             <td></td>  
  64.             <td>24</td>  
  65.         </tr>  
  66.         </tbody>  
  67. </table>  
  68.     </body>  
  69. </html>  

 

6.tablesortpager.jsp排序兼分頁插件:

             

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml">  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  5. <mce:script language="javascript" type="text/javascript" src="/S2SHJQuery/lib/jquery-1.2.6.pack.js" mce_src="S2SHJQuery/lib/jquery-1.2.6.pack.js"></mce:script>  
  6. <mce:script language="javascript" type="text/javascript" src="/S2SHJQuery/lib/jquery.tablesorter.js" mce_src="S2SHJQuery/lib/jquery.tablesorter.js"></mce:script>  
  7. <mce:script language="javascript" type="text/javascript" src="/S2SHJQuery/lib/jquery.tablesorter.pager.js" mce_src="S2SHJQuery/lib/jquery.tablesorter.pager.js"></mce:script>  
  8.   
  9. <mce:script language="javascript"><!--   
  10. $(document).ready(function(){   
  11.     $("#userList").tablesorter({sortList: [ [2,1]]}).tablesorterPager({container: $("#pager")});      
  12. });   
  13. // --></mce:script>  
  14. <title>jquery.tablesorter實現table排序(含分頁)</title>  
  15. </head>  
  16. <body>  
  17. <table width="50%" border="1" align="center" cellpadding="0" cellspacing="0" id="userList">  
  18.                       <thead>  
  19.                       <tr class="main-font2">    
  20.                       <th>Name</th>  
  21.                         <th>Sex</th>  
  22.                         <th>old</th>  
  23.                       </tr>  
  24.   </thead>  
  25.                         <tbody>  
  26.                         
  27.                      <tr>  
  28.             <td>李四</td>  
  29.             <td></td>  
  30.             <td>14</td>  
  31.         </tr>  
  32.         <tr>  
  33.             <td>張三</td>  
  34.             <td></td>  
  35.             <td>50</td>  
  36.         </tr>  
  37.         <tr>  
  38.             <td>趙五</td>  
  39.             <td>Sex</td>  
  40.             <td>60</td>  
  41.         </tr>  
  42.         <tr>  
  43.             <td>麗麗</td>  
  44.             <td></td>  
  45.             <td>18</td>  
  46.         </tr>  
  47.         <tr>  
  48.             <td>蟈蟈</td>  
  49.             <td></td>  
  50.             <td>24</td>  
  51.         </tr>  
  52.         <tr>  
  53.             <td>飛行1</td>  
  54.             <td></td>  
  55.             <td>24</td>  
  56.         </tr>  
  57.         <tr>  
  58.             <td>飛行2</td>  
  59.             <td></td>  
  60.             <td>24</td>  
  61.         </tr>  
  62.         <tr>  
  63.             <td>飛行3</td>  
  64.             <td></td>  
  65.             <td>24</td>  
  66.         </tr>  
  67.         <tr>  
  68.             <td>飛行4</td>  
  69.             <td></td>  
  70.             <td>24</td>  
  71.         </tr>  
  72.         <tr>  
  73.             <td>飛行5</td>  
  74.             <td></td>  
  75.             <td>24</td>  
  76.         </tr>  
  77.         <tr>  
  78.             <td>飛行6</td>  
  79.             <td></td>  
  80.             <td>24</td>  
  81.         </tr>  
  82.         <tr>  
  83.             <td>飛行7</td>  
  84.             <td></td>  
  85.             <td>24</td>  
  86.         </tr>  
  87.                         </tbody>  
  88. </table>  
  89. <div id="pager" class="pager">  
  90.                                 <form align="center">  
  91.                                     每頁記錄數:   
  92.                                     <select class="pagesize">  
  93.                                         <option selected="selected" value="10">10</option>  
  94.                                         <option value="15">15</option>  
  95.                                         <option value="20">20</option>  
  96.                                     </select>  
  97.                                           
  98.                                     <input type="hidden" class="pagedisplay"/>  
  99.                                     <a href="#" mce_href="#"  class="first" title="首頁">首頁</a> |    
  100.                                     <a href="#" mce_href="#"  class="prev" title="上一頁">上一頁</a> |    
  101.                                     <a href="#" mce_href="#" class="next" title="下一頁">下一頁</a> |    
  102.                                     <a href="#" mce_href="#" class="last" title="尾頁">尾頁</a> |    
  103.                                     共<span class="totalpage"></span>頁 |    
  104.                                     第<span class="curpage"></span>頁 |   
  105.                                     到第 <input name="pageNo" type="text" class="pageNo txt" size="3" value=""/> 頁 <a href="#" mce_href="#" class="pageGo">GO</a>       
  106.                                 </form>  
  107. </div>  
  108. </body>  
  109. </html>  

 

7.tablesuggest.jsp提示插件:

             

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%   
  3.     String path = request.getContextPath();   
  4.     String basePath = request.getScheme() + "://"   
  5.             + request.getServerName() + ":" + request.getServerPort()   
  6.             + path + "/";   
  7. %>  
  8.   
  9. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  10. <html>  
  11.     <head>  
  12.         <base href="<%=basePath%>">  
  13.   
  14.         <title>搜索框提示</title>  
  15.         <link rel="stylesheet" type="text/css" media="jquery.autocomplete.css"  
  16.             href="css/jquery.autocomplete.css" />  
  17.         <mce:script src="/S2SHJQuery/js/jquery.js" mce_src="S2SHJQuery/js/jquery.js"  
  18.             type="text/javascript"></mce:script>  
  19.         <mce:script  
  20.             src="/S2SHJQuery/lib/jquery.autocomplete.js"  
  21.             type="text/javascript"></mce:script>  
  22.         <mce:script type="text/javascript"><!--   
  23.         var  arr = ["Allen","Albert","Alberto","Alladin"];   
  24.         $(document).ready(function() {   
  25.                 //$("#userList").autocomplete(arr);   
  26.                  $("#userList").autocomplete("show.action", { selectFirst:true,extraParams: {testvalue:function(){return $('#userList').val();}},    
  27.                 width: 170,minChars:1, selectOnly: 1,inputSeparator:':'});   
  28.             });    
  29.        
  30. // --></mce:script>  
  31.     </head>  
  32.     <body>    
  33.         This is my JSP page.    
  34.         <br>  
  35.         <table >  
  36.     <tbody>  
  37.         <tr>  
  38.             <td>提示框測試:<input type="text" name="userList" id="userList"/></td>  
  39.         </tr>  
  40.         </tbody>  
  41. </table>  
  42.     </body>  
  43. </html>  

 

8.table-validation.jsp驗證插件:

             

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%   
  3. String path = request.getContextPath();   
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";   
  5. %>  
  6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  7. <html>  
  8.   <head>  
  9.     <link rel="stylesheet" type="text/css" media="screen" href="css/screen.css" mce_href="css/screen.css" />  
  10.     <mce:script src="/S2SHJQuery/js/jquery.js" mce_src="S2SHJQuery/js/jquery.js" type="text/javascript"></mce:script>  
  11.  <mce:script src="/S2SHJQuery/lib/jquery.validate.js" mce_src="S2SHJQuery/lib/jquery.validate.js" type="text/javascript"></mce:script>  
  12.  <mce:script src="/S2SHJQuery/lib/jquery.validate.messages_cn.js" mce_src="S2SHJQuery/lib/jquery.validate.messages_cn.js" type="text/javascript"></mce:script>  
  13.  <mce:style type="text/css"><!--   
  14. * { font-family: Verdana; font-size: 96%; }   
  15. label { width: 10em; float: left; }   
  16. label.error { float: none; color: red; padding-left: .5em; vertical-align: top; }   
  17. p { clear: both; }   
  18. .submit { margin-left: 12em; }   
  19. em { font-weight: bold; padding-right: 1em; vertical-align: top; }   
  20. --></mce:style><style type="text/css" mce_bogus="1">* { font-family: Verdana; font-size: 96%; }   
  21. label { width: 10em; float: left; }   
  22. label.error { float: none; color: red; padding-left: .5em; vertical-align: top; }   
  23. p { clear: both; }   
  24. .submit { margin-left: 12em; }   
  25. em { font-weight: bold; padding-right: 1em; vertical-align: top; }</style>  
  26.   <mce:script type="text/javascript"><!--   
  27.   $(document).ready(function(){   
  28.     //引入驗證的js.jquery.validate.js,並引入中文js jquery.validate.messages_cn.js   
  29.     //可在js裏面進行修改,注意css格式   
  30.     //獲取form值後,即可根據id值來進行validation操作   
  31.     //取相應的驗證規則:對應的輸入值即可   
  32.     //可參照鋒利的JQuery P218頁   
  33.     //同時可利用這一特性生成驗證碼   
  34.     $("#commentForm").validate({   
  35.         rules: {   
  36.             username: {   
  37.                 required: true,   
  38.                 minlength: 3   
  39.             },   
  40.             email: {   
  41.                 required: true,   
  42.                 email: true   
  43.             },   
  44.             url:"url",   
  45.             comment: "required"   
  46.         }   
  47.       });   
  48.   });   
  49.      
  50. // --></mce:script>  
  51.   </head>  
  52.      
  53.   <body>  
  54.     <form class="cmxform" id="commentForm" method="get" action="">  
  55.  <fieldset>  
  56.    <legend>jquery-validation 插件jsp</legend>  
  57.    <p>  
  58.      <label for="cusername">用戶名:</label>  
  59.      <em>*</em><input id="cusername" name="username" size="25" />  
  60.    </p>  
  61.    <p>  
  62.      <label for="cemail">郵件:</label>  
  63.      <em>*</em><input id="cemail" name="email" size="25"  />  
  64.    </p>  
  65.    <p>  
  66.      <label for="curl">URL:</label>  
  67.      <em>  </em><input id="curl" name="url" size="25"  value="" />  
  68.    </p>  
  69.    <p>  
  70.      <label for="ccomment">評論:</label>  
  71.      <em>*</em><textarea id="ccomment" name="comment" cols="22">

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章