[jboss-user] [JBoss Seam] - Page scope of the Seam component

mSX do-not-reply at jboss.com
Fri Nov 24 03:27:49 EST 2006


Hi all,

Can anyone, please, explain me the following new-made registration example:

User.java
//$Id: User.java,v 1.9 2005/09/10 19:08:01 gavin Exp $
  | package org.jboss.seam.example.registration;
  | 
  | import static org.jboss.seam.ScopeType.SESSION;
  | 
  | import java.io.Serializable;
  | 
  | import javax.persistence.Entity;
  | import javax.persistence.Id;
  | import javax.persistence.Table;
  | 
  | import org.hibernate.validator.Length;
  | import org.hibernate.validator.NotNull;
  | import org.jboss.seam.annotations.Name;
  | import org.jboss.seam.annotations.Scope;
  | 
  | @Entity
  | @Name("user")
  | @Scope(SESSION)
  | @Table(name = "users")
  | public class User implements Serializable {
  |     private static final long serialVersionUID = 1881413500711441951L;
  | 
  |     private String username;
  |     private String password;
  |     private String name;
  | 
  |     public User(String name, String password, String username) {
  |         this.name = name;
  |         this.password = password;
  |         this.username = username;
  |     }
  | 
  |     public User() {
  |     }
  | 
  |     @NotNull
  |     public String getName() {
  |         return name;
  |     }
  | 
  |     public void setName(String name) {
  |         this.name = name;
  |     }
  | 
  |     @NotNull
  |     @Length(min = 5, max = 15)
  |     public String getPassword() {
  |         return password;
  |     }
  | 
  |     public void setPassword(String password) {
  |         this.password = password;
  |     }
  | 
  |     @Id
  |     @NotNull
  |     @Length(min = 5, max = 15)
  |     public String getUsername() {
  |         return username;
  |     }
  | 
  |     public void setUsername(String username) {
  |         this.username = username;
  |     }
  | 
  |     public String toString() {
  |         return "User(" + username + ")";
  |     }
  | }
  | 

Message.java
package org.jboss.seam.example.registration;
  | 
  | import static org.jboss.seam.ScopeType.PAGE;
  | 
  | import java.io.Serializable;
  | 
  | import org.jboss.seam.annotations.Name;
  | import org.jboss.seam.annotations.Scope;
  | 
  | @Name("customMessage")
  | @Scope(PAGE)
  | public class Message implements Serializable {
  | 
  |     private static final long serialVersionUID = -2763236998519280798L;
  | 
  |     private static final String DEFAULT_MESSAGE = "Hello World";
  |     
  |     private String message = DEFAULT_MESSAGE;
  |     private String description = DEFAULT_MESSAGE;
  | 
  |     public Message() {
  |     }
  | 
  |     public Message(String message, String description) {
  |         this.message = message;
  |         this.description = description;
  |     }
  | 
  |     public String getDescription() {
  |         return description;
  |     }
  | 
  |     public void setDescription(String description) {
  |         this.description = description;
  |     }
  | 
  |     public String getMessage() {
  |         return message;
  |     }
  | 
  |     public void setMessage(String message) {
  |         this.message = message;
  |     }
  | 
  | }
  | 

Register.java
//$Id: Register.java,v 1.2 2005/09/10 18:29:46 gavin Exp $
  | package org.jboss.seam.example.registration;
  | 
  | import javax.ejb.Local;
  | 
  | @Local
  | public interface Register {
  |     String register();
  | }

//$Id: RegisterAction.java,v 1.11 2006/06/11 19:54:33 gavin Exp $
  | package org.jboss.seam.example.registration;
  | 
  | import java.util.List;
  | 
  | import javax.ejb.Stateless;
  | import javax.persistence.EntityManager;
  | import javax.persistence.PersistenceContext;
  | 
  | import org.hibernate.validator.Valid;
  | import org.jboss.seam.annotations.In;
  | import org.jboss.seam.annotations.Logger;
  | import org.jboss.seam.annotations.Name;
  | import org.jboss.seam.annotations.Out;
  | import org.jboss.seam.contexts.Contexts;
  | import org.jboss.seam.core.FacesMessages;
  | import org.jboss.seam.log.Log;
  | 
  | @Stateless
  | @Name("register")
  | public class RegisterAction implements Register {
  | 
  |     @In
  |     @Valid
  |     private User user;
  |     
  |     @In(value = "customMessage", create = true) @Out
  |     private Message myMessage;
  |     
  |     @PersistenceContext
  |     private EntityManager em;
  | 
  |     @Logger
  |     private Log log;
  | 
  |     public String register() {
  |         List existing = em.createQuery("select username from User where username=:username")
  |                 .setParameter("username", user.getUsername()).getResultList();
  |         
  |         myMessage.setMessage("New message");
  |         
  |         log.info(myMessage == Contexts.getPageContext().get("customMessage"));
  |         
  |         if (existing.size() == 0) {
  |             em.persist(user);
  |             log.info("Registered new user #{user.username}");
  |             return null; //"/registered.jsp";
  |         } else {
  |             FacesMessages.instance().add("User #{user.username} already exists");
  |             return null;
  |         }
  |     }
  | 
  | }
  | 

register.jsp
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
  | <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
  | <%@ taglib uri="http://jboss.com/products/seam/taglib" prefix="s" %>
  | 
  | <html>
  |  <head>
  |   <title>Register New User</title>
  |  </head>
  |  <body>
  |   <f:view>
  |    <h:form>
  |      <table border="0">
  |        <s:validateAll>
  |          <tr>
  |            <td>Username</td>
  |            <td><h:inputText value="#{user.username}" required="true"/></td>
  |          </tr>
  |          <tr>
  |            <td>Real Name</td>
  |            <td><h:inputText value="#{user.name}" required="true"/></td>
  |          </tr>
  |          <tr>
  |            <td>Password</td>
  |            <td><h:inputSecret value="#{user.password}" required="true"/></td>
  |          </tr>
  |        </s:validateAll>
  |      </table>
  |      <h:messages/>
  |      <h:commandButton type="submit" value="Register" action="#{register.register}"/>
  |    </h:form>
  |    
  |    Custom message: <b><h:outputText value="#{customMessage.message}"/></b><br/>
  |    My message: <b><h:outputText value="#{myMessage.message}"/></b><br/>
  |    
  |   </f:view>
  |  </body>
  | </html>
  | 

The question is about RegisterAction and register.jsp. Why are customMessage and myMessage different on the register.jsp, but in the RegisterAction the are the same?
If I set any other scope (except ScopeType.PAGE) of the Message component then customMessage and myMessage are the same.

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3988350#3988350

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3988350



More information about the jboss-user mailing list