在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一些标签库的使用了,觉得那种尖括号括起来的那种方式在后期维护方面不好用,渐渐的摒弃那种最原始的方法。