<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 431,  comments - 344,  trackbacks - 0

    目前需求, 客戶上傳excel文件, 有列名, 列名不固定, 想預(yù)覽數(shù)據(jù), 使用Jmesa做table, 有兩種實(shí)現(xiàn)方法. 第一種使用動態(tài)類, 封裝map對象. 第二種是一種巧妙的方法. 下面先介紹第一種方法:
    使用動態(tài)類:

    package com.founder.cst.action;

    import Java.util.ArrayList;
    import Java.util.List;

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    import org.apache.commons.beanutils.BasicDynaBean;
    import org.apache.commons.beanutils.BasicDynaClass;
    import org.apache.commons.beanutils.DynaBean;
    import org.apache.commons.beanutils.DynaClass;
    import org.apache.commons.beanutils.DynaProperty;
    import org.jmesa.core.filter.MatcherKey;
    import org.jmesa.facade.TableFacade;
    import org.jmesa.facade.TableFacadeFactory;
    import org.jmesa.view.html.component.HtmlTable;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.ModelMap;
    import org.springframework.web.bind.annotation.RequestMapping;

    import com.founder.cst.common.StringFilterMatcher;

    @Controller
    @RequestMapping
    public class DynaController {

     @RequestMapping
     public String books(final HttpServletRequest request, HttpServletResponse response, ModelMap model){

      DynaClass  bookClass = createBasicDynaClass();
      try {
       List<DynaBean> results = new ArrayList<DynaBean>();
       DynaBean book11 = bookClass.newInstance();
       book11.set("id", "1");
       book11.set("name", "Spring");
       book11.set("price", "18.29");
       results.add(book11);
       DynaBean book22 = bookClass.newInstance();
       book22.set("id", "2");
       book22.set("name", "Hibernate");
       book22.set("price", "12.29");
       results.add(book22);
       DynaBean book33 = bookClass.newInstance();
       book33.set("id", "3");
       book33.set("name", "Python");
       book33.set("price", "17.32");
       results.add(book33);
       
       TableFacade tableFacade = TableFacadeFactory.createTableFacade("booksTable", request);
       
       tableFacade.setColumnProperties("id", "name", "price");
       tableFacade.setMaxRows(10);
       tableFacade.setMaxRowsIncrements(10, 20, 30);
       tableFacade.setItems(results);
       HtmlTable table = (HtmlTable) tableFacade.getTable();
       table.getTableRenderer().setWidth("558px");
       table.getRow().setUniqueProperty("id");
       String html = tableFacade.render();
       model.addAttribute("html", html);
      } catch (IllegalAccessException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      } catch (InstantiationException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }
      return "books";
     }
     
     public DynaClass createBasicDynaClass() {
      DynaClass dynaClass = null;
            //create basic field for dynaClass
            DynaProperty[] dynaProps = new DynaProperty[3];
            dynaProps[0] = new DynaProperty("id");
            dynaProps[1] = new DynaProperty("name", String.class);
            dynaProps[2] = new DynaProperty("price", String.class);
            //create map filed for dynaClass
            dynaClass = new BasicDynaClass("first", BasicDynaBean.class, dynaProps);
            return dynaClass;
        }


    }

    下面第二種:
    @RequestMapping
     public String bookslist(final HttpServletRequest request, HttpServletResponse response, ModelMap model){
      List<Map<String, String>> books = new ArrayList<Map<String, String>>();
      Map<String, String> book1 = new HashMap<String, String>();
      book1.put("id", "1");
      book1.put("name", "Spring");
      book1.put("price", "18.29");
      books.add(book1);
      
      Map<String, String> book2 = new HashMap<String, String>();
      book2.put("id", "2");
      book2.put("name", "Hibernate");
      book2.put("price", "28.98");
      books.add(book2);
      
      Map<String, String> book3 = new HashMap<String, String>();
      book3.put("id", "3");
      book3.put("name", "Python");
      book3.put("price", "38.22");
      books.add(book3);
      
      model.addAttribute("books", books);
      return "booklist";
     }

    頁面為:

    <jmesa:tableFacade
         id="booksTable"
         items="${books}"
         maxRows="10"
         maxRowsIncrements="10,20,30"
         var="book">
         <jmesa:htmlTable width="630px">
          <jmesa:htmlRow>
           <c:forEach items="${book}" var="b">
           <jmesa:htmlColumn property="${b.key}" title="${b.key}" filterable="false"/>
           </c:forEach>
          </jmesa:htmlRow>
         </jmesa:htmlTable>
        </jmesa:tableFacade>

    這里注意property中的值.

    今天查看源碼, 和昨天想象一樣,  jmesa在渲染單元格的時(shí)候, 分兩種, 一種就是map類型, 使用get(key)來取值, 另一種就是普通的javabean對象, 使用getPropertyName()取值渲染.

    /*
     * Copyright 2004 original author or authors.
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     *    http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    package org.jmesa.util;

    import Java.util.Collection;
    import Java.util.Map;

    import org.apache.commons.beanutils.PropertyUtils;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;

    /**
     * General utilities to process the Collecton of Beans or the Collection of
     * Maps. Most methods wrap or add value to the commons Beanutils.
     *
     * @since 2.1
     * @author Jeff Johnston
     */
    public class ItemUtils {

        private static final Logger logger = LoggerFactory.getLogger(ItemUtils.class);
        public static final String JMESA_ITEM = "jmesa-item";

        private ItemUtils() {
            // hide constructor
        }

        /**
         * Get the value from the Bean or Map by property.
         *
         * @param item The Bean or Map.
         * @param property The Bean attribute or Map key.
         * @return The value from the Bean or Map.
         */
        public static Object getItemValue(Object item, String property) {
            Object itemValue = null;

            try {
                if (item instanceof Map) {
                    itemValue = ((Map<?, ?>) item).get(property);
                    if (itemValue != null) {
                        return itemValue;
                    }

                    // ports such as the tags will store the original bean
                    Object bean = ((Map<?, ?>) item).get(JMESA_ITEM);
                    if (bean == null) {
                        logger.debug("the map does not have property " + property);
                        return null;
                    }

                    itemValue = getItemValue(bean, property);
                } else {
                    itemValue = PropertyUtils.getProperty(item, property);
                }
            } catch (Exception e) {
                logger.debug("item class " + item.getClass().getName() + " does not have property " + property);
            }

            return itemValue;
        }

        /**
         * Get the Class for the property.
         *
         * @param items The Collection of Beans or Maps.
         * @param property The Bean attribute or Map key.
         * @return The Class for the property.
         */
        public static Class<?> getPropertyClassType(Collection<?> items, String property)
            throws Exception {

            Object item = items.iterator().next();

            if (item instanceof Map) {
                for (Object object : items) {
                    Map map = (Map) object;
                    Object val = map.get(property);

                    if (val == null) {
                        continue;
                    }

                    return val.getClass();
                }
            }

            return PropertyUtils.getPropertyType(item, property);
        }
    }

    posted on 2009-03-19 17:43 周銳 閱讀(1309) 評論(1)  編輯  收藏 所屬分類: Ajax
    主站蜘蛛池模板: 性做久久久久免费观看| 亚洲精品午夜视频| 亚洲三区在线观看无套内射| 亚洲精品在线免费观看视频| 中文在线免费不卡视频| 成人免费777777| 亚洲春色在线视频| 免费国产va在线观看| 免费在线观看h片| 亚洲精品无码乱码成人| 亚洲av日韩专区在线观看| 久久精品无码精品免费专区| 国产免费av一区二区三区| 久久av无码专区亚洲av桃花岛| 特级毛片全部免费播放a一级| 免费能直接在线观看黄的视频| 亚洲成AV人综合在线观看| 国产精品高清免费网站| 国产人妖ts在线观看免费视频| 久久亚洲中文无码咪咪爱| 亚洲成年人啊啊aa在线观看| 亚洲精品无码你懂的| 我们的2018在线观看免费高清| 亚洲国产成人久久精品动漫| 免费无码午夜福利片| 国产性爱在线观看亚洲黄色一级片| 亚洲乱理伦片在线观看中字| 国产一区二区三区免费在线观看| 四虎一区二区成人免费影院网址| 精品少妇人妻AV免费久久洗澡| 亚洲大香人伊一本线| 全免费一级午夜毛片| 国产乱妇高清无乱码免费| 可以免费观看的一级毛片| 国产AV旡码专区亚洲AV苍井空| 18禁美女黄网站色大片免费观看| 亚洲AV区无码字幕中文色| 久久国产精品2020免费m3u8| 亚洲色欲色欲www在线播放| 免费无码精品黄AV电影| 亚洲入口无毒网址你懂的|