现在的位置: 首页 > 综合 > 正文

Show multiple tables in one page by using valueList

2013年12月22日 ⁄ 综合 ⁄ 共 2378字 ⁄ 字号 评论关闭

First we need speicify a unique name to each table

Table1:

<vlh:root id="(batchList)" scope="request" value="batchList" configName="classicLook" url="?" includeParameters="*">
   <table width="450" class="classicLook" cellspacing="0" ...

 

Table2:

<vlh:root id="(batchDetailList)" scope="request" value="batchDetailList" configName="classicLook" url="?" includeParameters="*">
   <table width="450" class="classicLook" cellspacing="0" ...

 

 

Second we use the name to retrieve the certain specified value list data

Table1:

ValueListHandler valueListHandler = ActionUtil.getValueListHandler(servletRequest.getSession().getServletContext());
    Map filters = new HashMap();
    filters.put("batch_no", batchNo);
    Map parameters = ValueListRequestUtil.getRequestParameterMap(servletRequest, "(batchList)"); // Here we use the table name
    parameters.putAll(filters);
    ValueList vl = valueListHandler.getValueList("batchList", new ValueListInfo(parameters));
    servletRequest.setAttribute("prodScopeList", vl);

 

Table2:

ValueListHandler valueListHandler = ActionUtil.getValueListHandler(servletRequest.getSession().getServletContext());
    Map filters = new HashMap();
    filters.put("batch_no", batchNo);
    Map parameters = ValueListRequestUtil.getRequestParameterMap(servletRequest, "(batchDetailList)"); // Here we use the table name
    parameters.putAll(filters);
    ValueList vl = valueListHandler.getValueList("batchList", new ValueListInfo(parameters));
    servletRequest.setAttribute("prodScopeList", vl);

 

According to the source code of ValueListRequestUtil.getRequestParameterMap

we found that valueListHandler will collect the request parameters by checking the substring of paramter.

public static Map getRequestParameterMap(HttpServletRequest request, String id)
   {
      int lenghtOfId = (id == null) ? 0 : id.length();

      Map parameters = new HashMap(request.getParameterMap().size());
      for (Enumeration keys = request.getParameterNames(); keys.hasMoreElements();)
      {
         String key = (String) keys.nextElement();
         String[] values = request.getParameterValues(key);
         Object value = ((values == null) ? null : (values.length == 1 ? (Object) values[0] : (Object) values));

         if (lenghtOfId > 0)
         {
            if (key.endsWith(id))
            {
               parameters.put(key.substring(0, key.length() - lenghtOfId), value);
            }
         }
         else
         {
            parameters.put(key, value);
         }

      }
      return parameters;
   }

 

So, just keep the name is different in one page, then all tables are available.

 

 

 

抱歉!评论已关闭.