<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文件, 有列名, 列名不固定, 想預覽數據, 使用Jmesa做table, 有兩種實現方法. 第一種使用動態類, 封裝map對象. 第二種是一種巧妙的方法. 下面先介紹第一種方法:
    使用動態類:

    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在渲染單元格的時候, 分兩種, 一種就是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 周銳 閱讀(1320) 評論(1)  編輯  收藏 所屬分類: Ajax
    主站蜘蛛池模板: 亚洲国产精华液2020| 亚洲第一永久在线观看| 亚洲乱色伦图片区小说| 91福利免费视频| 亚洲精品国产成人99久久| baoyu116.永久免费视频| 亚洲综合国产一区二区三区| 久久国产一片免费观看| 亚洲人成无码www久久久| 四虎一区二区成人免费影院网址 | 最新欧洲大片免费在线| 亚洲视频精品在线观看| 99久久人妻精品免费二区| 亚洲黄色网站视频| 97视频免费在线| 亚洲熟妇AV一区二区三区浪潮| 男女啪啪永久免费观看网站| 亚洲a∨国产av综合av下载| 亚洲精品无码成人片在线观看| 国产精品视频全国免费观看| 亚洲阿v天堂在线| 99久久99这里只有免费费精品| 国内精品久久久久影院亚洲| 国产在线a不卡免费视频| 中国好声音第二季免费播放| 久久亚洲私人国产精品vA| 免费一本色道久久一区| 羞羞视频网站免费入口| 国产AV无码专区亚洲AV毛网站| 久久国产免费福利永久| 美国毛片亚洲社区在线观看| 久久精品国产精品亚洲下载| 久久免费国产视频| 亚洲精品国产高清在线观看| 中文字幕亚洲无线码a| 免费观看美女用震蛋喷水的视频| 亚洲女子高潮不断爆白浆| 亚洲区小说区激情区图片区| 成人免费视频网站www| 九九久久国产精品免费热6| 亚洲高清中文字幕综合网|