SeamFramework.orgCommunity Documentation

Chapter 3. Injectable Servlet objects and request state

3.1. @Inject @RequestParam
3.2. @Inject ServletContext
3.3. @Inject HttpSession
3.4. @Inject HttpServletRequest
3.5. @Inject @ContextPath
3.6. @Inject List<Cookie>

Seam Servlet provides producers that expose a wide-range of information available in a Servlet environment (e.g., implicit objects such as ServletContext and HttpSession and state such as HTTP request parameters) as beans. You access this information by injecting the beans produced. This chapter documents the Servlet objects and request state that Seam Servlet exposes and how to inject them.

The @RequestParam qualifier allows you to inject an HTTP request parameter (i.e., URI query string or URL form encoded parameter).

Assume a request URL of /book.jsp?id=1.

@Inject @RequestParam("id")

private String bookId;

The value of the specified request parameter is retrieved using the method HttpServletRequest.getParameter(String). It is then produced as a dependent-scoped bean of type String qualified @RequestParam.

The name of the request parameter to lookup is either the value of the @RequestParam annotation or, if the annotation value is empty, the name of the injection point (e.g., the field name).

Here's the example from above modified so that the request parameter name is implied from the field name:

@Inject @RequestParam

private String id;

If the request parameter is not present, and the injection point is annotated with @DefaultValue, the value of the @DefaultValue annotation is returned instead.

Here's an example that provides a fall-back value:

@Inject @RequestParam @DefaultValue("25")

private String pageSize;

If the request parameter is not present, and the @DefaultValue annotation is not present, a null value is injected.

The ServletContext is made available as an application-scoped bean. It can be injected safetly into any CDI bean as follows:

@Inject

private ServletContext context;

The producer obtains a reference to the ServletContext by observing the @Initialized ServletContext event raised by this module's Servlet-to-CDI event bridge.

The HttpSession is made available as a request-scoped bean. It can be injected safetly into any CDI bean as follows:

@Inject

private HttpSession session;

The producer obtains a reference to the HttpSession by observing the @Initialized HttpServletRequest event raised by this module's Servlet-to-CDI event bridge.

The HttpServletRequest is made available as a request-scoped bean. It can be injected safetly into any CDI bean as follows:

@Inject

private HttpServletRequest request;

The producer obtains a reference to the HttpServletRequest by observing the @Initialized HttpServletRequest event raised by this module's Servlet-to-CDI event bridge.

The context path is made available as a dependent-scoped bean. It can be injected safetly into any request-scoped CDI bean as follows:

@Inject @ContextPath

private String contextPath;

You can safetly inject the context path into a bean with a wider scope using an instance provider:

@Inject @ContextPath

private Instance<String> contextPathProvider;
...
String contextPath = contextPathProvider.get();

The context path is retrieved from the HttpServletRequest.

The list of Cookie objects is made available as a request-scoped bean. It can be injected safetly into any CDI bean as follows:

@Inject

private List<Cookie> cookies;

The producer uses a reference to the request-scoped HttpServletRequest bean to retrieve the Cookie intances by calling getCookie().