# Package org.apache.wiki.tags

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.

Related Packages
Package
Description
org.apache.wiki
The chief package of JSPWiki.
Class
Description
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.
ParamHandler
Interface to be implemented by any tag that wishes to contain a wiki:param tag for passing dynamic name-value pairs.
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.