I'm sure this is something simple, but this is my first go around w/using 
Converters within a Seam app.

-----

I simply want to convert a name field entered in the UI to 'Firstname 
Lastname'.  For instance, if a user enters 'Smart, Todd', I want to convert 
that into 'Todd Smart'.  I realize there are easy ways to do this within the 
getter/setter for the name field ... this is an exercise to better understand 
how to use JSF Converters in Seam -- I eventually want to 'ajaxify' these 
converter sequences for more complex requirements.

So...I created FullName and FullNameConverter classes:


  | package org.jboss.seam.example.hibernate;
  | 
  | import java.io.Serializable;
  | 
  | public class FullName implements Serializable {
  | 
  |     private String firstName;
  |     private String lastName;
  |     
  |     public FullName(String unparsedName) {
  |         unparsedName = unparsedName.trim();
  |         String[] splitName = unparsedName.split(" ");
  |         if(splitName.length == 2 && unparsedName.indexOf(",") == -1) {
  |             setFirstName(splitName[0]);
  |             setLastName(splitName[1]);
  |         } else if(splitName.length == 2) {
  |             setFirstName(splitName[1]);
  |             setLastName(splitName[0].replace(",", ""));            
  |         }            
  |     }
  |     
  |     public String getFirstName() {
  |         return firstName;
  |     }
  |     
  |     public void setFirstName(String firstName) {
  |         this.firstName = firstName;
  |     }
  |     
  |     public String getLastName() {
  |         return lastName;
  |     }
  |     
  |     public void setLastName(String lastName) {
  |         this.lastName = lastName;
  |     }
  |     
  |     public String toString() {
  |         return this.firstName + " " + this.lastName;
  |     }
  | }
  | 


  | package org.jboss.seam.example.hibernate;
  | 
  | import java.io.Serializable;
  | 
  | import javax.faces.component.UIComponent;
  | import javax.faces.context.FacesContext;
  | import javax.faces.convert.Converter;
  | import javax.faces.convert.ConverterException;
  | 
  | import org.jboss.seam.InterceptionType;
  | import org.jboss.seam.ScopeType;
  | import org.jboss.seam.annotations.Intercept;
  | import org.jboss.seam.annotations.Name;
  | import org.jboss.seam.annotations.Scope;
  | 
  | @Scope(ScopeType.SESSION)
  | @Name("fullNameConverter")
  | @Intercept(InterceptionType.ALWAYS)
  | public class FullNameConverter implements Serializable, Converter {
  | 
  |     public Object getAsObject(FacesContext arg0, UIComponent arg1, String 
arg2)
  |             throws ConverterException {
  |         
  |         FullName fullName;
  |         fullName = new FullName(arg2);
  |         
  |         return fullName;
  |     }
  | 
  |     public String getAsString(FacesContext arg0, UIComponent arg1, Object 
arg2)
  |             throws ConverterException {
  |         String returnString;
  |         
  |         FullName fullName;
  |         fullName = (FullName) arg2;
  |         
  |         returnString = (fullName==null ? null : fullName.toString());
  |         
  |         return returnString;
  |     }
  | 
  | }
  | 

I'm using the AppUser class (from the Seam Hibernate3 Booking Example).  
Specifically, it's name property:


  |    @NotNull
  |    @Length(max=100)
  |    public String getName()
  |    {
  |       return name;
  |    }
  |    public void setName(String name)
  |    {
  |       this.name = name;
  |    }
  | 

Finally, I've updated the register.xhtml from the same booking example to use 
the FullNameConverter for the name field:


  |     <div class="entry">
  |             <div class="label"><h:outputLabel for="name">Name (first 
last):</h:outputLabel></div>
  |             <div class="input">
  |                     <h:inputText id="name" value="#{appUser.name}" 
required="true" converter="#{fullNameConverter}" >
  |                     </h:inputText>
  |                     <br/>
  |                     <span class="errors"><h:message for="name" /></span>
  |             </div>
  |     </div>
  | 

...............

When I run through the app (with my debugger attached), I find that ... when 
the form is submitted ... the FullNameConverter.getAsObject() is called (which 
does receive the inputted value).  This is followed by a call to the 
AppUser.getName() method.  The result is that the getName does NOT have the 
converted value.  Of course, this is to be expected....as the 
FullNameConverter.getAsString() would need to be called to return the converted 
value.

Oddly enough, when the register.xhtml file is initially executed (before the 
user has entered values), I show (debugger breakpoints) that 
FullNameConverter.getAsString() is called, followed by a call to 
AppUser.getName().

Anyway...I'm sure this is something simple -- or foolish :) -- that I'm doing 
and/or assuming regarding using Converters within Seam.  Please clue me in...


-- 
Regards, 

Todd

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

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3975871
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to