Implements the JSP Tag Library to use makumba in JSP pages.

The Makumba JSP rendering engine

The Makumba JSP rendering engine runs the algorithmic process of converting mak:list, mak:object, mak:value, mak:input to OQL queries and going through their results to display the data in pages . The rendering engine must overcome a wealth of deficinencies of the JSP standard. The JSP standard offers limited capabilities in regard to:

Terms used for taglib implementation

To explain in more detail how the above problems are solved, we will resort to a glossary of terms, which should be referred from the javadocs of the classes in this package.
<mak:object from="best.johnny.Season ssn" where="ssn.name = $season" >
-> key label is ssn
	<mak:list from="lbg l"><mak:value "l.name"/> 
  <mak:list from="members m" where="m.homeLbg = l">
<mak:value "m.firstName" />
</mak:list>
</mak:list>
            will result in 2 queries:
	1/ SELECT l, l.name from Lbg l
2/ SELECT l, l.name, m.firstName from Lbg l, Members m WHERE m.homeLbg=l ;
When iterating thru the inner mak:list, the iterationGroupData is selected from the entire list data (of query 2) by selecting only that data for which 'l' (the keyProjection) is equal to the 'l' of the  current parent iteration. In other words:
iterationGroupData=grouper(listData, currentDataSet)
where listData (for that mak:list) is computed by the root tag by running that mak:list's listQuery, and stored in the listGroup
actually what happens is
// at group list start
Grouper listDataGrouper= new Grouper(dataAboutKeys, listData)
// then, for every parent iteration
iterationGroupData=listDataGrouper.getData(currentDataSet)
	valueQueryData=grouper(valueQueryResult, currentDataSet)
where valueQueryResult (for that mak:value) is computed by the root tag by running that value query, and stored in the list group for nullableValueQuerymak:values, the valueQueryData can be of length 0 (a null pointer) or 1 (not-null pointers). For setFieldValueQueries it can be of any length.
@see org.makumba.view