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