How to set and get cookie in seam?
statelessbean Dec 16, 2007 10:13 AMHi,
I have one stateless bean in my app, and my scenario is:
1. first time visit page set cookie with some value,
2. second and more visits check if cookie exist and read it's value.
I don't know where is my problem, each time I read only 2 cookies whitch aren't mine:
1. session id cookie
2. identity cookie
package pl.sguni.universum; import java.math.BigInteger; import java.util.Random; import org.jboss.seam.ScopeType; import javax.ejb.EJBException; import javax.ejb.Stateless; import javax.ejb.TransactionAttribute; import javax.ejb.TransactionAttributeType; import javax.faces.context.FacesContext; import javax.persistence.Query; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.jboss.seam.annotations.In; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Scope; import org.jboss.seam.annotations.web.RequestParameter; import pl.sguni.constants.LetterType; import pl.sguni.engine.BattleSystem; import pl.sguni.model.Moves; @Stateless @Scope(ScopeType.SESSION) @Name("advAction") public class AdvAction extends BattleSystem implements AdvConsole { public AdvAction() {} @In protected FacesContext facesContext; @RequestParameter private String id; @In("#{remoteAddr}") private String ipString; //******************************************************************************* @TransactionAttribute(TransactionAttributeType.REQUIRED) public String adv() { String ret = "/AdvDone.xhtml"; try { long a = System.currentTimeMillis(); //================================================= if ((id.length() > 0) && (ipString.length() > 0)) { if (!checkCookie()) { createCookie(ipString); ret = "/Adv.xhtml"; } } //================================================= long b = System.currentTimeMillis(); System.out.println("TIME: " + (b - a) + " ms."); } catch(EJBException e) { log.error("User: ->advAction - adv(): " + e.getMessage()); } return ret; } private void createCookie(String value) { Cookie cookie = new Cookie("adv", id); cookie.setMaxAge(0); cookie.setSecure(false); cookie.setVersion(32140800); HttpServletResponse res = (HttpServletResponse)facesContext.getExternalContext().getResponse(); res.addCookie(cookie); } public boolean checkCookie() { String cookieName = null; Cookie[] cookie = ((HttpServletRequest)facesContext.getExternalContext().getRequest()).getCookies(); if(cookie != null && cookie.length > 0) { System.out.println("Cookie : [" + cookie + "] of length : " + cookie.length); for (int i = 0; i < cookie.length;i++) { Cookie currentCookie = cookie; cookieName = currentCookie.getName(); if (cookieName.contentEquals("adv")) { System.out.println("DEBUG:cookie_value = " + currentCookie.getValue()); return true; } } } else System.out.println("Cannot find any cookie"); return false; } }