在java web開發的過程中,遇到的一種情況就是后台傳到前台的jsp頁面中是一個自定義對象的List,然后jsp頁面並不是直接將這些List展示在頁面上,而是通過某些js方法的觸發才去顯示指定的部分數據。在此之前,我一直通過<%%>把JAVA代碼嵌套在jsp頁面中進行遍歷,我覺得摻雜在一起太繁瑣了,所以尋求更優的方法。
今天通過一些大神的指導,找到了解決方案,在此做一下記錄。
1. 后台傳遞的List中對象都是自定義的,需要先轉換成Json對象(用到下面的工具類-從其他網站拷貝);
1 package dsh.bikegis.tool; 2 3 import java.beans.IntrospectionException; 4 import java.beans.Introspector; 5 import java.beans.PropertyDescriptor; 6 import java.util.List; 7 8 /** 9 * json的操作類 10 * @author NanGuoCan 11 * 12 */ 13 public class JsonUtil { 14 15 /** 16 * @param object 17 * 任意對象 18 * @return java.lang.String 19 */ 20 public static String objectToJson(Object object) { 21 StringBuilder json = new StringBuilder(); 22 if (object == null) { 23 json.append("\"\""); 24 } else if (object instanceof String || object instanceof Integer) { 25 json.append("\"").append(object.toString()).append("\""); 26 } else { 27 json.append(beanToJson(object)); 28 } 29 return json.toString(); 30 } 31 32 /** 33 * 功能描述:傳入任意一個 javabean 對象生成一個指定規格的字符串 34 * 35 * @param bean 36 * bean對象 37 * @return String 38 */ 39 public static String beanToJson(Object bean) { 40 StringBuilder json = new StringBuilder(); 41 json.append("{"); 42 PropertyDescriptor[] props = null; 43 try { 44 props = Introspector.getBeanInfo(bean.getClass(), Object.class) 45 .getPropertyDescriptors(); 46 } catch (IntrospectionException e) { 47 } 48 if (props != null) { 49 for (int i = 0; i < props.length; i++) { 50 try { 51 String name = objectToJson(props[i].getName()); 52 String value = objectToJson(props[i].getReadMethod().invoke(bean)); 53 json.append(name); 54 json.append(":"); 55 json.append(value); 56 json.append(","); 57 } catch (Exception e) { 58 } 59 } 60 json.setCharAt(json.length() - 1, '}'); 61 } else { 62 json.append("}"); 63 } 64 return json.toString(); 65 } 66 67 /** 68 * 功能描述:通過傳入一個列表對象,調用指定方法將列表中的數據生成一個JSON規格指定字符串 69 * 70 * @param list 71 * 列表對象 72 * @return java.lang.String 73 */ 74 public static String listToJson(List<?> list) { 75 StringBuilder json = new StringBuilder(); 76 json.append("["); 77 if (list != null && list.size() > 0) { 78 for (Object obj : list) { 79 json.append(objectToJson(obj)); 80 json.append(","); 81 } 82 json.setCharAt(json.length() - 1, ']'); 83 } else { 84 json.append("]"); 85 } 86 return json.toString(); 87 } 88 }
2.后台直接把轉換后的String放在request里
3.前台javascript讀取
1 <script type="text/javascript"> 2 function newLiftPermissionScope() { 3 var list = ${liftTypeDicListJson};//讀取request里的liftTypeDicListJson對象 4 var mhtml = "<tr><td><table><tr><td><select><option>"; 5 console.log("listtype:"+typeof(list));//輸出list的類型:Object 6 $(list).each(function(i,dic){ 7 console.log("dicName:"+dic.dicName);//遍歷自定義對象,並輸出自定義對象的dicName屬性 8 }); 9 mhtml+="</option></select></td><td></td></tr></table></td></tr>"; 10 11 } 12 </script>
通過這種方法,貌似解決我在jsp里繼續嵌套爪哇代碼的問題了。我現在基本上學會了el,jstl一些標簽庫的使用了,覺得那種尖括號括起來的那種方式在后期維護方面不好用,漸漸的摒棄那種最原始的方法。
