-
Available since OmniFaces 2.1
The CDI annotation @
Cookie
allows you to inject a HTTP request cookie value from the current Faces context in a CDI managed bean. It's basically like @ManagedProperty("#{cookie.cookieName.value}") private String cookieName;
in a "plain old" Faces managed bean.
By default the name of the cookie is taken from the name of the variable into which injection takes place. The example below injects the cookie with name foo
.
@Inject @Cookie
private String foo;
The name can be optionally specified via the name
attribute. The example below injects the cookie with name foo
into a variable named bar
.
@Inject @Cookie(name="foo")
private String bar;
Validation is by design not supported as cookies are usually beyond enduser's control. TODO: conversion?
Demo
Cookie injected in bean:
Actual cookie in view:
Demo source code
<h:form>
<h:commandButton value="Add/update a session cookie with a random value" action="#{cdiCookieBean.add}" />
</h:form>
<h:panelGroup id="result" layout="block">
<p>Cookie injected in bean: #{cdiCookieBean.testCookie}</p>
<p>Actual cookie in view: #{cookie.testCookie.value}</p>
</h:panelGroup>
package org.omnifaces.showcase.cdi;
import java.io.IOException;
import java.util.UUID;
import jakarta.enterprise.context.RequestScoped;
import jakarta.inject.Inject;
import jakarta.inject.Named;
import org.omnifaces.cdi.Cookie;
import org.omnifaces.util.Faces;
@Named
@RequestScoped
public class CdiCookieBean {
@Inject @Cookie
private String testCookie;
public void add() throws IOException {
Faces.addResponseCookie("testCookie", UUID.randomUUID().toString(), -1);
Faces.refresh();
}
public String getTestCookie() {
return testCookie;
}
}
Documentation & Sources