JSP页面中的js方法遍历后台传来的自定义对象的List

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

原文地址:https://www.cnblogs.com/lucky2u/p/3498978.html