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.