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

  • 相关阅读:
    教程:在 Visual Studio 中开始使用 Flask Web 框架
    教程:Visual Studio 中的 Django Web 框架入门
    vs2017下发现解决python运行出现‘No module named "XXX""的解决办法
    《sqlite权威指南》读书笔记 (一)
    SQL Server手工插入标识列
    hdu 3729 I'm Telling the Truth 二分图匹配
    HDU 3065 AC自动机 裸题
    hdu 3720 Arranging Your Team 枚举
    virtualbox 虚拟3台虚拟机搭建hadoop集群
    sqlserver 数据行统计,秒查语句
  • 原文地址:https://www.cnblogs.com/lucky2u/p/3498978.html
Copyright © 2011-2022 走看看