-
1. Re: Not understanding @Out completely
trippccn Apr 25, 2006 6:38 PM (in response to trippccn)
anybody? even a point in the right direction so I can figure out how to do it myself would help.... -
2. Re: Not understanding @Out completely
gavin.king Apr 25, 2006 10:58 PM (in response to trippccn)Perhaps you need scope=ScopeType.CONVERSATION ?
-
3. Re: Not understanding @Out completely
gavin.king Apr 25, 2006 10:59 PM (in response to trippccn)By the way, you absolutely did not show enough code to make it possible to answer your question.
-
4. Re: Not understanding @Out completely
trippccn Apr 27, 2006 12:36 AM (in response to trippccn)Sorry... I thought maybe the problem was obvious enough to avoid posting code. I can't get the jsp file to display the users name if I try and use "otherMember" but it works fine if I change the bean and outputText tag to "member".
Here's the bean:package org.cnow.site; import static javax.persistence.PersistenceContextType.EXTENDED; import static org.jboss.seam.annotations.Outcome.REDISPLAY; import java.io.Serializable; import javax.ejb.Interceptors; import javax.ejb.Remove; import javax.ejb.Stateful; import javax.faces.context.FacesContext; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import org.jboss.seam.annotations.Begin; import org.jboss.seam.annotations.Conversational; import org.jboss.seam.annotations.Destroy; import org.jboss.seam.annotations.In; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Out; import org.jboss.seam.annotations.RequestParameter; import org.jboss.seam.ejb.SeamInterceptor; import org.cnow.object.Member; @Stateful @Name("memberDetail") @Interceptors(SeamInterceptor.class) @Conversational(ifNotBegunOutcome="main") public class MemberDetailAction implements MemberDetail, Serializable { @PersistenceContext(type=EXTENDED) private EntityManager em; @In private transient FacesContext facesContext; @RequestParameter int id; @Out (value="otherMember") private Member otherMember; @Begin(join=true) public String getDetails() { otherMember = (Member)em.createQuery("from Member where id = :id") .setParameter("id", id) .getSingleResult(); return "member_detail"; } @Destroy @Remove public void destroy() {} }
And here is the jsp view file:<%@ include file="/WEB-INF/inc/initializers.jspf" %> <c:set var="pagetitle" scope="request" value="Member Detail"/> <%// include file="/WEB-INF/inc/checkLogin.jspf" %> <html> <head> <%@ include file="/WEB-INF/inc/head-main.jspf" %> </head> <body> <f:view> <div id="content"> <%@ include file="/WEB-INF/inc/header.jspf" %> <div id="main-container"> <h1>Member Detail</h1> <br /><br /> Name: <h:outputText value="#{otherMember.first_name} #{otherMember.last_name}"/><br> </div> <%@ include file="/WEB-INF/inc/footer.jspf" %> </div> </f:view> </body> </html>
And finally, here's the Member object entity bean:package org.cnow.object; import static org.jboss.seam.ScopeType.SESSION; import java.io.Serializable; import java.util.Collection; import java.util.Date; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.OneToOne; import javax.persistence.Table; import org.hibernate.annotations.Where; import org.hibernate.validator.Length; import org.hibernate.validator.Email; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Scope; @Entity @Name("member") @Scope(SESSION) @Table(name="members") public class Member implements Serializable { private int id; private String first_name; private String last_name; private String email; private String address_1; private String address_2; private String city; private String state; private String zip_code; private String phone; private String password; private boolean receive_newsletter; private Date birthdate; private int referred_by; private char gender; private Date joined_date; private int campaign_id; private Collection<MemberImage> member_images; public Member(int id, String first_name, String last_name, String email, String password) { this.id = id; this.first_name = first_name; this.last_name = last_name; this.email = email; this.password = password; } public Member() {} @Id @GeneratedValue public int getId() { return id; } public void setId(int id) { this.id = id; } @Length(min=1, message="Please provide your first name") public String getFirst_name() { return first_name; } public void setFirst_name(String first_name) { this.first_name = first_name; } public String getLast_name() { return last_name; } public void setLast_name(String last_name) { this.last_name = last_name; } @Email public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getAddress_1() { return address_1; } public void setAddress_1(String address_1) { this.address_1 = address_1; } public String getAddress_2() { return address_2; } public void setAddress_2(String address_2) { this.address_2 = address_2; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getState() { return state; } public void setState(String state) { this.state = state; } public String getZip_code() { return zip_code; } public void setZip_code(String zip_code) { this.zip_code = zip_code; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } // Figure out how to best validate this for use in both login and register @Length(min=4, message="Password must be at least 4 characters.") public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public boolean isReceive_newsletter() { return receive_newsletter; } public void setReceive_newsletter(boolean receive_newsletter) { this.receive_newsletter = receive_newsletter; } public Date getBirthdate() { return birthdate; } public void setBirthdate(Date birthdate) { this.birthdate = birthdate; } public int getReferred_by() { return referred_by; } public void setReferred_by(int referred_by) { this.referred_by = referred_by; } public char getGender() { return gender; } public void setGender(char gender) { this.gender = gender; } public Date getJoined_date() { return joined_date; } public void setJoined_date(Date joined_date) { this.joined_date = joined_date; } public int getCampaign_id() { return campaign_id; } public void setCampaign_id(int campaign_id) { this.campaign_id = campaign_id; } @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy="member") public Collection<MemberImage> getMember_images() { return member_images; } public void setMember_images(Collection<MemberImage> member_images) { this.member_images = member_images; } }
-
5. Re: Not understanding @Out completely
trippccn Apr 27, 2006 12:13 PM (in response to trippccn)Is that sufficient?
thanks
chad -
6. Re: Not understanding @Out completely
gavin.king Apr 27, 2006 12:14 PM (in response to trippccn)What scope is otherMember supposed to be? At the moment it is event-scoped.
-
7. Re: Not understanding @Out completely
trippccn Apr 27, 2006 12:39 PM (in response to trippccn)ack... I didn't realize that scope was an available attribute for the @Out annotation. Is there a more updated version of the seam docs online or an errata anywhere?
Problem solved, thanks Gavin.
Chad