JSP Best Practices
As discussed in CSS Best Practices and JavaScript Best Practices portlets require that all HTML element ids be namespaced to prevent duplicate ids on a page when a portlet is included multiple times on a page. Some JSP tag libraries automatically generate ids if they are not specified, so a developer should specify the ids. For example
<!-- Spring form tag will cause duplicate ids --> <form:select path="title" items="${titles}" /> <!-- when rendered might look something like this --> <select id="title" name="title"> <option value="Mr">Mr</option> <option value="Mrs">Mrs</option> <option value="Miss">Miss</option> </select> <!-- Instead specify a namespaced id --> <c:set var="n"><portlet:namespace /></c:set> <form:select id="${n}title" path="title" items="${titles}" />
defineObjects tag
The defineObjects tag creates a number of useful variables that the JSP page can use. Refer to the JSR-286 Spec for more information. Make sure you have the v2.0 of the portlet URI when defining the portlet prefix.
<%@ taglib prefix="portlet" uri="http://java.sun.com/portlet_2_0" %> <portlet:defineObjects/> <!-- Page can now access user preferences values. --> <p>Hello ${portletPreferencesValues['prefName'][0]}</p> <!-- Access to portlet session attributes as a map --> <p>You last said ${portletSessionScope['conversation'].lastItem}</p> <!-- Access to portlet config --> <p>Portlet's static name from portlet.xml is ${portletConfig.portletName}</p>
Miscellaneous
- You can access environment variables using markup such as <p>USER environment variable=<spring:eval expression="@systemEnvironment['USER']"/></p> (TBD Verify this)
Add Feedback content box here.....