# Package org.apache.wiki.tags

Provides standard JSP tags for JSPWiki.

## Package specification

This package contains a diverse set of JSP tags which are used in the template pages.

### Managing tag pooling

A typical problem for many tag developers is that many web containers pool tags, i.e. the tag is not released after doEndTag(), but put into a pool, from which it can be invoked again. This is highly efficient, as you don't need to instantiate the tag again.

The problem, however, is that when your tag is put back into the pool, it still retains all the internal references, i.e. none of the member fields are cleared. This means there can be dangling references to things which will take a lot of memory. In JSPWiki's case, the WikiContext is a good example: it can actually contain quite a lot of stuff accumulated during it's life time, and therefore it's important for memory use that all references are cleared.

Unfortunately, the "easy" solution of implementing your custom release handler in `Tag.release()` does not help, since it is called only when the tag is truly and completely released from the pool. So, as long as the tag sits in the pool, release() is not called, and your references keep on dangling like wet spaghetti off the balcony.

Neither can you trust e.g. doEndTag() being called every time, since e.g. if there is an exception, doEndTag() is never called.

The correct way to do reference cleaning is to implement the `TryCatchFinally` interface, where the `doFinally()` method is called every time the tag has been finished with and prior to it being put back into the pool. Most JSPWiki base tag classes `IteratorTag` and `WikiTagBase` implement the TryCatchFinally interface, which means that any class subclassed from them also allows has those methods.

Check out the javadocs for the tags for more info!

## Related documentation

TBD.

Interface Summary
ParamHandler: Interface to be implemented by any tag that wishes to contain a wiki:param tag for passing dynamic name-value pairs.

Class Summary
AdminBeanIteratorInfo: Just provides iteration support for AdminBeanIteratorTag
AdminBeanIteratorTag: Provides an iterator for all AdminBeans of a given type.
AttachmentsIteratorInfo: Just provides the TEI data for AttachmentsIteratorTag.
AttachmentsIteratorTag: Iterates through the list of attachments one has.
AuthorTag: Writes the author name of the current page, including a link to that page, if that page exists.
BaseURLTag: Writes the jspwiki baseURL.
BreadcrumbsTag: Implement a "breadcrumb" (most recently visited) trail.
BreadcrumbsTag.FixedQueue: Extends the LinkedList class to provide a fixed-size queue implementation
CalendarTag: Provides a nice calendar.
CheckLockInfo: A companion to CheckLogTag.
CheckLockTag: Checks whether the page is locked for editing.
CheckRequestContextTag: Includes body, if the request context matches.
CheckVersionTag: Does a version check on the page.
CommentLinkTag: Writes a comment link.
ContentEncodingTag: Returns the app name.
ContentTag: Is used as a "super include" tag, which can include the proper context based on the wikicontext.
CookieTag: Sets or gets Cookie values.
CsrfProtectionTag: Outputs the hidden `CsrfProtectionFilter.ANTICSRF_PARAM`.
DiffLinkTag: Writes a diff link.
EditLinkTag: Writes an edit link.
EditorIteratorInfo: Just provides the TEI data for EditorIteratorTag.
EditorIteratorTag: Iterates through editors.
EditorTag: Creates an editor component with all the necessary parts to get it working.
FeedDiscoveryTag: Outputs links to all the site feeds and APIs this Wiki/blog supports.
HasAttachmentsTag: Includes body if page has attachments.
HistoryIteratorInfo: Just provides the TEI data for HistoryIteratorTag.
HistoryIteratorTag: Iterates through tags.
IfNoSearchResultsTag: If there have been no search results, then outputs the body text.
IncludeResourcesTag: This tag is used to include any programmatic includes into the output stream.
IncludeTag: Includes an another JSP page, making sure that we actually pass the WikiContext correctly.
InsertDiffTag: Writes difference between two pages using a HTML table.
InsertPageTag: Renders WikiPage content.
IteratorTag: Iterates through tags.
LinkTag: Provides a generic link tag for all kinds of linking purposes.
LinkToParentTag: Writes a link to a parent of a Wiki page.
LinkToTag: Writes a link to a Wiki page.
MessagesTag: Returns or clears the current messages associated with the user's wiki session.
NextVersionTag: Writes the version number of the next version of the page.
NoSuchPageTag: Includes the body in case there is no such page available.
PageDateTag: Writes the modification date of the page, formatted as specified in the attribute "format".
PageExistsTag: Includes the body in case the set page does exist.
PageInfoLinkTag: Writes a link to the Wiki PageInfo.
PageNameTag: Returns the currently requested page name.
PageSizeTag: Returns the currently requested page or attachment size.
PageTypeTag: Includes the body, if the current page is of proper type.
PageVersionTag: Writes the version of the current page.
ParamTag: ParamTag submits name-value pairs to the first enclosing ParamHandler instance.
ParentPageNameTag: Returns the parent of the currently requested page.
PermissionTag: Tells whether the user in the current wiki context possesses a particular permission.
PluginTag: Inserts any Wiki plugin.
PreviousVersionTag: Outputs the version number of the previous version of this page.
RequestResourceTag: Provides easy access to TemplateManager.addResourceRequest().
RSSImageLinkTag: Writes an image link to a JSPWiki RSS file.
SearchResultIteratorInfo: Just provides the TEI data for IteratorTag.
SearchResultIteratorTag: Iterates through Search result results.
SearchResultsSizeTag: Outputs the size of the search results list, if it contains any items.
SearchResultsTag: Includes the body content, if there are any search results.
SetPaginationTag: Calculate pagination string.
SpamFilterInputsTag: Provides hidden input fields which are checked by the `SpamFilter`.
TabbedSectionTag: Generates tabbed page section: container for the Tab tag.
TabTag: Generates single tabbed page layout.
TemplateDirTag: Returns the currently used template.
TranslateTag: Converts the body text into HTML content.
UploadLinkTag: Writes a link to the upload page.
UserCheckTag: Includes the content if an user check validates.
UserNameTag: Returns the current user name, or empty, if the user has not been validated.
UserProfileTag: Returns user profile attributes, or empty strings if the user has not been validated.
VariableTag: Returns the value of an Wiki variable.
WikiBodyTag: This is a class that provides the same services as the WikiTagBase, but this time it works for the BodyTagSupport base class.
WikiLinkTag: Root class for different internal wiki links.
WikiTagBase: Base class for JSPWiki tags.