Package org.makumba.list.tags

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

See:
          Description

Class Summary
AttributeTag mak:attribute tag
AttrTEI Extra information for the attributes
CountTEI Extra information for count, to be more specific countVar, maxCountVar, ...
GenericListTag This class provides utility methods for all makumba tags, such as exception handling storage of formatting parameters database name setting/getting cleanup It extends AnalysableTag which enables JSP analysis support.
IfTag If tag will accept test="..." similar to value tag, and will show body only if OQL expression evaluates to true (integer 1).
ObjectTag mak:object tag
QueryTag Display of OQL query results in nested loops.
ResultListTag This class is a specially tailored mak:list to work on the results from a search form.
SectionTag mak:section tag, capable of rendering its content dynamically and reloading it via AJAX callbacks
TODO support for multiple events:
TODO special effects for show/hide/reload
TODO detection of "toggle"/"update" situation (i.e. two sections next to one another that hide/show on the same event)?
ValueTag mak:value tag
FIXME use formatters in order to compute the editor fields
TODO implement support for in-place edition of dates and others
VarTEI Extra information for the variables
 

Exception Summary
MakumbaJspException An exception thrown due to makumba-specific reasons during tag execution
 

Package org.makumba.list.tags Description

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

The Makumba JSP rendering engine

See also a graphical description of the terms below.
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 Also:
org.makumba.view