CDI Portlet Predefined Beans

CDI Portlet Predefined Beans

Liferay DXP provides injectable portlet artifacts for CDI called Portlet Predefined Beans, as specified by JSR 362. There are two types of predefined beans:

The table below describes these attributes for each bean:

Artifact: The bean’s type.

Bean EL Name: Expression Language (EL) name for accessing the bean in a JSP or JSF page.

Qualifier: Annotation applied to the bean for defining and selecting a bean implementation.

Valid during (phase): The portlet phases in which the bean is valid.

Portlet Request Scoped Beans

These beans have the @PortletRequestScoped annotation. Here are their artifact types, bean EL names, and annotation qualifiers, along with their valid portlet phases.

Table 1: Portlet Request Scoped Beans1

Artifact Bean EL Name Qualifier Valid during
PortletConfig portletConfig - all
PortletRequest portletRequest - all
PortletResponse portletResponse - all
ActionRequest actionRequest - action
ActionResponse actionResponse - action
HeaderRequest headerRequest - header
HeaderResponse headerResponse - header
RenderRequest renderRequest - render
RenderResponse renderResponse - render
EventRequest eventRequest - event
EventResponse eventResponse - event
ResourceRequest resourceRequest - resource
ResourceResponse resourceResponse - resource
StateAwareResponse stateAwareResponse - action, event
MimeResponse mimeResponse - header, render, resource
ClientDataRequest clientDataRequest - action, resource
RenderParameters renderParams - all
MutableRenderParameters mutableRenderParams - action, event
ActionParameters actionParams - action
ResourceParameters resourceParams - resource
PortletContext portletContext - all
PortletMode portletMode - all
WindowState windowState - all
PortletPreferences portletPreferences - all
Cookies(List<Cookie>) cookies - all
PortletSession portletSession - all
Locales(List<Locale>) locales - all

Dependent Scoped Beans

These beans use the @Dependent scope. They’re of type java.lang.String, which is final. This disqualifies them from being proxied. To prevent using dependent scoped beans in a scope broader than their original scope, you should only inject them into @PortletRequestScoped beans.

Table 2: Dependent Scoped Beans2

Artifact Bean EL Name Qualifier Valid during
Namespace (String) namespace @Namespace all
ContextPath (String) contextPath @ContextPath all
WindowID (String) windowId @WindowId all
Portlet name (String) portletName @PortletName all

CDI Dependency Injection

  1. Martin Scott Nicklous, Java™ Portlet Specification 3.0, page 122.

  2. Martin Scott Nicklous, Java™ Portlet Specification 3.0, page 123.