The content described on this page doesn’t apply to batched email notifications (default from Jira 8.4), as they’re based on different templates. For more info on notifications and different ways of editing the templates, see Customizing email content.
In Jira 9.x, each JSP file could be accessed directly. For example, you could access includes/reports/project/mac.jsp
and get a response.
Starting from Jira 10.0, only a handful of JSP files can be accessed directly, such as login.jsp
and logout.jsp
. The rest of them can only be requested as views of actions. You are no longer able to directly access secure/views/myaction.jsp
in your browser. However, you can set up an action to use it:
1 2<webwork1 key="myKey" name="actions.MyAction" class="java.lang.Object"> <actions> <action name="com.acme.actions.MyAction" alias="MyAction"> <view name="success">/secure/views/myaction.jsp</view> </action> </actions> </webwork1>
If you request a non-allowed JSP, you’ll get an HTTP 404 response.
If you would like to see if a direct JSP access is being blocked, enable DEBUG
logs for com.atlassian.jira.web.filters.annotations.JspChecker
.
If you wish to change Jira's behaviour by modifying the JSPs or Velocity templates, you can do so simply by changing files in the Jira distribution. Jira will pick up changes to its JSPs the next time that page is displayed: restarting isn't necessary. On the other hand, you will need to restart Jira in order to see changes to the Velocity templates.
However, keep in mind that the next time you upgrade Jira - or need a new installation for any reason - you will have to manually copy any changes you have made to the JSPs or templates into the new installation of Jira. If the JSPs or templates have changed in the newer version, you will have to port your customization into them.
Velocity is a server-side templating language used by Jira to render page content. Velocity allows Java objects to be called alongside standard HTML. The following table lists the Velocity contexts available for use in the XML descriptor and Velocity views.
Name | Description |
---|---|
user | Currently logged in user. Type: User. |
helper | Convenient class which holds information such as the current request and selected project. Type: JiraHelper. |
xmlutils | Utilities for basic XML reading. Type: XMLUtils. |
textutils | Utilities for common String manipulations. Type: TextUtils. |
urlcodec | Utility for encoding a string. Type: JiraUrlCodec. |
outlookdate | Class to give a nice String representation of a date. Type: OutlookDate. |
authcontext | User locale dependant utility class. Can get the current user, locale, I18nBean (for internationalisation) and OutlookDate. Type: JiraAuthenticationContext. |
dateutils | Utilities for displaying date/time. Type: DateUtils. |
externalLinkUtil | A simple utility class that lets you resolve external links that may need to change, because of partner sites and such. Type: ExternalLinkUtil. |
requestContext | A context that allows for different implementations depending on whether it is running in the scope of a web request, or via email. Type: VelocityRequestContext. |
req | current request Type: HttpServletRequest. |
baseurl | The base URL for this instance (velocityRequestContext.getBaseUrl()). Type: String. |
The contents of the Velocity context used to process web templates and email templates is listed below.
This is the listing of the contents of the Velocity context used to process web templates.
Velocity variable & Jira Object/Value | Description | As of Version | Condition |
---|---|---|---|
constantsManager com.atlassian.jira.config .ConstantsManager | Manager for issue types, statuses, priorities and resolutions. | 3.4 | always present |
projectManager com.atlassian.jira.project .ProjectManager | Implementations of this interface are responsible for all management of project entities within Jira. | 3.4 | always present |
customFieldManager com.atlassian.jira.issue .CustomFieldManager | Functions for working with CustomFields | 3.5 | always present |
applicationProperties com.atlassian.jira.config.properties .ApplicationProperties | provides access to Jira properties stored in the DB | 3.4 | always present |
jirautils com.atlassian.jira.util.JiraUtils | Miscellaneous utility methods. | 3.4 | always present |
jirakeyutils com.atlassian.jira.util.JiraKeyUtils | utilities to determine the validity of Jira project/issue keys | 3.4 | always present |
buildutils com.atlassian.jira.util.BuildUtils | provides information on the running version of Jira | 3.4 | always present |
velocityhelper com.atlassian.jira.util .JiraVelocityHelper | A simple class store methods we want to expose to velocity templates | 3.4 | always present |
userutils com.atlassian.core.user.UserUtils | A utility class for operating on users. | 3.4 | always present |
textutils com.opensymphony.util.TextUtils | lots of utility methods for manipulating text | 3.4 | always present |
params java.util.Map | parameters of the IssueEvent that triggered this email notification | 3.4 | always present |
issue org.ofbiz.core.entity .GenericValue | a GenericValue representing the issue which triggered this email notification | 3.4 | always present |
issueObject com.atlassian.jira.issue .MutableIssue | an Issue object representing the issue which triggered this email notification | 3.5.2 | always present |
remoteUser com.opensymphony.user.User | the logged in user if they exist | 3.4 | remoteUser != null |
renderedDescription java.lang.String | the rendered description field, it a renderer has been specified | 3.4 | renderer specifed for issue and field |
renderedEnvironment java.lang.String | the rendered environment field, it a renderer has been specified | 3.4 | renderer specifed for issue and field |
timeoriginalestimate java.lang.String | The DateUtils .getDurationPretty value of timeoriginalestimate from issue or "None" if null | 3.4 | always present |
timeestimate java.lang.String | The DateUtils .getDurationPretty value of timeestimate from issue or "None" if null | 3.4 | always present |
timespent java.lang.String | The DateUtils .getDurationPretty value of timespent from issue or "None" if null | 3.4 | always present |
duedate java.sql.Timestamp | Duedate from the issue | 3.4 | always present |
versions List( org.ofbiz.core.entity .GenericValue ) | A list of GenericValues representing the Affected Versions of the issue | 3.4 | always present |
fixfors List( org.ofbiz.core.entity .GenericValue ) | A list of GenericValues representing the Fix Versions of the issue | 3.4 | always present |
components List( org.ofbiz.core.entity .GenericValue ) | A list of GenericValues representing the Components of the issue | 3.4 | always present |
assignee com.opensymphony.user.User | The assignee of the issue | 3.4 | assignee != null |
reporter com.opensymphony.user.User | The reporter of the issue | 3.4 | reporter != null |
renderedComment java.lang.String | the rendered comment field, it a renderer has been specified. The comment is the comment associated with the change | 3.4 | renderer specifed for issue and field and comment created |
comment org.ofbiz.core.entity .GenericValue | generic value representing the comment associated with the change | 3.4 | comment created |
commentauthor com.opensymphony.user.User | the author of the comment | 3.4 | comment created |
timelogged java.lang.String | The DateUtils .getDurationPretty value of timelogged from issue or "None" if null | 3.4 | always present |
changelog org.ofbiz.core.entity .GenericValue | generic value representing the changelog associated with the change | 3.4 | changelog != null |
changelogauthor com.opensymphony.user.User | The change log author of the issue | 3.4 | changelog != null |
visibilitylevel java.lang.String | The security level of the comment | 3.4 | comment created |
i18n com.atlassian.jira.util.I18nHelper | Bean that searches for i18n text in JiraWebActionSupport .properties | 3.4 | always present |
dateutils com.atlassian.core.util.DateUtils | methods for working with dates | 3.4 | always present |
attachments List( org.ofbiz.core.entity .GenericValue ) | list of generic values that represents the attachments associated with the issue | 3.4 | always present |
security org.ofbiz.core.entity .GenericValue | generic value representing the security level, if any, associated with this issue | 3.4 | if( isEnterpriseEdition ) |
mailPluginsHelper com.atlassian.jira.mail .JiraMailPluginsHelperImpl | provides access to isPluginModuleEnabled() | 3.7 | always present |
This is the listing of the contents of the Velocity Context used to process email templates.
TemplateContext
provides access to some general object references for use in the templates - e.g. Utilities, Change Log details, etc.TemplateIssue
provides access to the Issue object - further extended by helper methods for displaying information in rendered HTML format (i.e. environment, description and comments) and users who may not exist in the system. All issue related details can be retrieved from the TemplateIssue.The following tables lists other objects that are also available within the context:
Velocity Variable & Jira Object/Value | Description |
---|---|
userutils com.atlassian.core.user .UserUtils | collection of utility methods for querying, creating, and removing users |
velocityhelper com.atlassian.jira.util .JiraVelocityHelper | a collection of miscellaneous methods (e.g. urlencode, indentTextBlock, printChangelog |
textutils com.opensymphony.util .TextUtils | collection of utility functions for manipulating text |
constantsManager com.atlassian.jira.config .ConstantsManager | Jira's constants for priorities, resolutions, issue types, statuses |
projectManager com.atlassian.jira.project .ProjectManager | management of project entities (e.g. getProjectByName, getComponents, getCategories) |
customFieldManager com.atlassian.jira.issue .CustomFieldManager | functions for working with custom fields |
applicationProperties com.atlassian.jira.config.properties .ApplicationProperties | access Jira's application properties |
jirautils com.atlassian.jira.util .JiraUtils | a handful of miscellaneous utility methods (e.g. isPublicMode, isSetup) |
jirakeyutils com.atlassian.jira.util .JiraKeyUtils | methods for working with project keys |
| buildutils is no longer available within the context. build variable should be used instead (see below) |
build | Since Jira 6.1 Jira build and edition information |
jiraUserUtils com.atlassian.jira.user.util .UserUtil | user level operations (e.g. getActiveUserCount, getDisplayableNameSafely, addUserToGroup) |
mailPluginsHelper com.atlassian.jira.mail .JiraMailPluginsHelperImpl | method for checking whether plugins are enabled |
userformat com.atlassian.jira.plugin.profile .UserFormatManager | formatting user names |
context | The Template Context object itself |
issue | An Issue object with extended helper methods for display - this is the issue for which the email notification event was triggered |
params java.util.Map | Parameters of the IssueEvent that triggered this email notification |
remoteUser com.opensymphony.user.User | The user who has triggered this event |
stringUtils org.apache.commons.lang .StringUtils | Utility object providing formatting methods |
padSize java.lang.Integer | Used in text emails for padding the display |
timeSpentFieldId java.lang.String | The Id of the TimeSpentField - used in changelog for work logged notifications |
attachments Collection( org.ofbiz.core.entity.GenericValue ) | Collection of Generic Values that represents the attachments associated with the issue |
htmlComment java.lang.String | The comment associated with this event as a rendered HTML formatted string. A basic string is returned if the comment cannot be rendered correctly - including links for any referenced Jira issues. |
comment | The comment associated with this event. The body of the comment will be the raw unprocessed comment as entered by the user (e.g. the raw wiki markup) |
commentauthor com.opensymphony.user.User | The author of the comment |
roleVisibilityLevel java.lang.String | The comment's project role level (overwritten by worklog) |
groupVisibilityLevel java.lang.String | The comment's group level (overwritten by worklog) |
originalhtmlComment java.lang.String |
|
originalcommentauthor com.opensymphony.user.User |
|
originalroleVisibilityLevel
| comment (overwritten by worklog) |
originalgroupVisibilityLevel
| comment (overwritten by worklog) |
worklog com.atlassian.jira.issue.worklog .Worklog |
|
timeSpentUpdated java.lang.Boolean |
|
startDateUpdated java.lang.Boolean |
|
commentUpdated java.lang.Boolean |
|
visibilityUpdated java.lang.Boolean |
|
originalworklog com.atlassian.jira.issue.worklog .Worklog |
|
changelog org.ofbiz.core.entity.GenericValue | The Generic value representing the changelog associated with the change |
changelogauthor com.opensymphony.user.User | The change log author |
security org.ofbiz.core.entity.GenericValue | The Generic value representing the security level, if any, associated with this issue |
rendererManager | Allows use of renderers such as wiki renderer. (e.g. $rendererManager.getRenderedContent("atlassian-wiki-renderer", "bold wiki", $issue.getIssueRenderContext())) |
recipient com.opensymphony.user.User | The recipient of the email |
i18n com.atlassian.jira.utilI .I18nHelper | i18n translation helper for the current recipient |
dateformatter com.atlassian.jira.web.util .OutlookDate | Date and time formatter for the current recipient's locale |
eventTypeName java.lang.String | Available from Jira 4.1. The localised event type name. (For example, for the Issue Assigned event, the key mail.event.type.issueassigned.name will be used.) If a translation is not available, the event type name will be used |
attachmentsManager com.atlassian.jira.mail.util .MailAttachmentsManager | Available from Jira 7.0.3. If this object is present, the mail attachments manager can be used to add attachments to an email and generate Content-IDs for those attachments. |
The following tutorials provide guidelines and give examples of how to modify Jira's JSPs and templates:
Rate this page: