[jboss-user] [JBoss Seam] - Using the EntityHome and problems therein

sjmenden do-not-reply at jboss.com
Thu Nov 16 15:21:47 EST 2006


I am creating a Help Ticketing system and I am following the SEAM documenation and making use of the EntityHome for CRUDing my Ticket Entity.  The initial creation and updating works great, however when I go to view tickets, then click on a ticket which gets redirected back to my original ticket.xhtml page, with ticketId as a parameter, I can not for the life of me get the ticket to display.  

I need another pair of eyes to see where I am going wrong.


ticket.xhtml

  | <ui:composition xmlns="http://www.w3.org/1999/xhtml"
  |                 xmlns:s="http://jboss.com/products/seam/taglib"
  |                 xmlns:ui="http://java.sun.com/jsf/facelets"
  |                 xmlns:f="http://java.sun.com/jsf/core"
  |                 xmlns:h="http://java.sun.com/jsf/html"
  |                 template="template.xhtml">
  |                        
  | <ui:define name="content">
  | 
  |     <h1 class="center">
  |     	<h:outputText rendered="#{!ticketHome.managed}" value="Create Ticket"/>
  |     	<h:outputText rendered="#{ticketHome.managed}" value="Edit Ticket"/>
  |     </h1>
  |     
  |     <h:messages globalOnly="true" styleClass="message"/>
  |     
  |     <h:form id="createTicket">
  |     	<f:facet name="beforeInvalidField">
  | 	        <s:message/>
  | 	    </f:facet>
  | 	    <f:facet name="afterInvalidField">
  | 	    	<h:graphicImage src="img/error.gif"/>
  | 	    </f:facet>
  | 	    <f:facet name="aroundInvalidField">
  | 	        <s:span styleClass="errors"/>
  | 	    </f:facet>
  | 	    
  |        	<s:validateAll>
  |        
  |        	<table class="form-center">
  |        	
  |        		<tr>
  |        			<td colspan="2" align="center" class="table-heading">Contact Information</td>
  |        		</tr>
  |        		<tr>
  |        			<td class="name">Name</td>
  |        			<td align="right">
  |                     <s:decorate>
  |                         <h:inputText id="name" required="true" value="#{ticketHome.instance.name}"/>
  |                     </s:decorate>
  |                	</td>
  |        		</tr>
  |        		<tr>
  |        			<td>
  |        				<span class="name">Problem Description</span>
  |        			</td>
  |        			<td align="right">
  |                     <s:decorate>
  |                    		<h:inputTextarea id="problemDescription" required="true" cols="50" rows="20" value="#{ticketHome.instance.problemDescription}"/>
  |                     </s:decorate>
  |                	</td>
  |        		</tr>
  |        		
  |        		<tr>
  |        			<td></td>
  |        			<td align="right">
  |        				<h:commandButton value="Create Ticket" action="#{ticketHome.persist}" rendered="#{!ticketHome.managed}"/>
  | 			        <h:commandButton value="Update Ticket" action="#{ticketHome.update}" rendered="#{ticketHome.managed}"/>
  | 			        <h:commandButton value="Delete Ticket" action="#{ticketHome.remove}" rendered="#{ticketHome.managed}"/>
  | 			        <s:link id="done" value="Done" linkStyle="button" propagation="end" view="/viewTickets.xhtml"/>
  |        			</td>
  |        		</tr>
  |        		
  |        	</table>
  |        </s:validateAll>
  |     </h:form>
  |     
  | </ui:define>
  | </ui:composition>
  | 



Ticket.java

  | @Entity
  | @Name("ticket")
  | @Role(name="tempTicket", scope=ScopeType.EVENT)
  | @Table(name="tickets")
  | public class Ticket implements Serializable {
  | 	
  | 	//seam-gen attributes (you should probably edit these)
  | 	private int id;
  | 	private Integer version;
  | 	private String name;
  | 	
  | 		
  | 	@Id @GeneratedValue
  | 	public int getId() {
  | 	     return id;
  | 	}
  | 
  | 	public void setId(int id) {
  | 	     this.id = id;
  | 	}
  | 	
  | 	@Version
  | 	public Integer getVersion() {
  | 	     return version;
  | 	}
  | 
  | 	private void setVersion(Integer version) {
  | 	     this.version = version;
  | 	}   	
  | 	
  | 	@NotNull
  | 	@Column(length=50)
  | 	@Length(max=50)
  | 	public String getName() {
  | 	     return name;
  | 	}
  | 
  | 	@Lob
  | 	public String getProblemDescription() {
  | 		return problemDescription;
  | 	}
  | 
  | 	public void setProblemDescription(String problemDescription) {
  | 		this.problemDescription = problemDescription;
  | 	}
  | 	
  | }
  | 
  | 



viewTickets.xhtml

  | <!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  | <ui:composition xmlns="http://www.w3.org/1999/xhtml"
  | 	    		xmlns:ui="http://java.sun.com/jsf/facelets"
  | 	  			xmlns:h="http://java.sun.com/jsf/html"
  | 	  			xmlns:f="http://java.sun.com/jsf/core"
  | 	  			xmlns:s="http://jboss.com/products/seam/taglib"
  | 					xmlns:a="https://ajax4jsf.dev.java.net/ajax"
  | 				  template="template.xhtml">
  | 
  | 	<!-- content -->
  | 	<ui:define name="content">
  | 		<div class="center">
  | 			<h1>Tickets</h1>
  | 		</div>
  | 		
  | 			<!-- Display the form for searching for tickets-->
  | 			<s:validateAll>
  | 			<table cellspacing="1" cellpadding="1" border="0" class="form-center">
  | 				<tr>
  | 					<td>
  | 						Subject:
  | 					</td>
  | 					<td>
  | 						<h:inputText value="#{tempTicket.subject}"/>
  | 					</td>
  | 				</tr>
  | 
  | 				<tr>
  | 					<td> </td>
  | 					<td align="right">
  | 						<h:commandButton value="Search" action="#{viewTickets.view}" styleClass="button" />
  | 					</td>
  | 				</tr>
  | 			</table>
  | 			</s:validateAll>
  | 			<br />
  | 			<br />
  | 
  | 			<!-- ***************************************************************** -->
  | 			<!-- Data Table of Tickets											   -->
  | 			<!-- ***************************************************************** -->
  | 			<h:dataTable value="#{tickets}"
  | 						 var="ticket"
  | 						 rendered="#{tickets.rowCount > 0}"
  | 						 styleClass="fiapps-table">
  | 
  | 				<!-- Ticket Number -->
  | 				<h:column>
  | 					<f:facet name="header">
  | 						<h:commandLink value="Ticket #" action="#{viewTickets.reorder}">
  | 							<f:param name="orderBy" value="id"/>
  | 						</h:commandLink>
  | 					</f:facet>
  | 					<s:link id="ticket" value="#{ticket.id}" view="/ticket.xhtml">
  | 		                <f:param name="ticketId" value="#{ticket.id}"/>
  | 		            </s:link>
  | 				</h:column>
  | 
  | 				<!-- Subject -->
  | 				<h:column>
  | 					<f:facet name="header">
  | 						<h:commandLink value="Subject" action="#{viewTickets.reorder}">
  | 							<f:param name="orderBy" value="subject"/>
  | 						</h:commandLink>
  | 					</f:facet>
  | 					<h:outputText value="#{ticket.subject}" />
  | 				</h:column>
  | 
  | 			</h:dataTable>
  | 			<br />
  | 			<h:messages/>
  | 			<br />
  | 			<div class="center">
  | 				<h:commandButton rendered="#{tickets.rowCount > 0}" 
  | 								 type="submit"
  | 								 value="Refresh"
  | 								 action="#{viewTickets.findFirstPage}" />
  | 				<h:commandButton action="#{viewTickets.findPreviousPage}" 
  | 								 value="Previous Page"
  | 								 disabled="#{!viewTickets.previousPage}"
  | 								 rendered="#{tickets.rowCount > 0}"/>
  | 				<h:commandButton action="#{viewTickets.findNextPage}" 
  | 								 value="Next Page"
  | 								 disabled="#{!viewTickets.nextPage}"
  | 							   rendered="#{tickets.rowCount > 0}"/>
  | 			</div>
  | 		</h:form>
  | 		<br />
  | 	</ui:define>
  | 
  | </ui:composition>
  | 
  | 



when I click on the Ticket Number I get in the url bar: http://localhost:8080/fiapps/ticket.seam?ticketId=1&dataModelSelection=ticket%3Atickets%5B0%5D

so I know the ticketId is getting passed.  But the ticket is not getting loaded.  Here are some additional classes.



TicketHome.java

  | @Name("ticketHome")
  | public class TicketHome extends EntityHome<Ticket> {
  | 	
  | 	
  | 	@Factory("ticket")
  |     public Ticket initPerson() { 
  | 		return getInstance(); 
  | 	}
  | 	
  | 	protected Ticket createInstance() {
  | 		Ticket ticket = new Ticket();
  |         return ticket;
  |     }
  | 	
  | 	public String getCreatedMessage() { return "New Ticket (#{ticket.subject}) created"; }
  | 	public String getUpdatedMessage() { return "Ticket (#{ticket.subject}) updated"; }
  | 	public String getDeletedMessage() { return "Ticket (#{ticket.subject}) deleted"; }
  | }
  | 


ViewTicketsBean.java - the relevant part

  | @Name("viewTickets")
  | @Stateful
  | @Scope(ScopeType.CONVERSATION)
  | public class ViewTicketsBean implements ViewTickets {
  | 
  | 	@In(create=false, value="tempTicket") @Out(value="tempTicket")
  | 	private Ticket tempTicket;
  | 
  | 	@Logger
  | 	private Log log;
  | 
  | 	@DataModel
  | 	private List<Ticket> tickets; 
  | 
  | 	@DataModelSelection
  | 	private Ticket ticket;
  | 
  | 	@In(create=true)
  | 	private EntityManager entityManager;
  | 
  | ...
  | 


Any help would be greatly appreciated.

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

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



More information about the jboss-user mailing list