[jboss-user] [JBoss Seam] - DataModel and Row Unavailable

ssc_ch do-not-reply at jboss.com
Thu Jun 28 03:44:34 EDT 2007


I have some problems in using the datamodel.
I have two Tables on my page and i add entries from one table to the 2nd, which works fine.
After adding i should have the possibility to remove entries again from the 2nd table, which works, but only with the first entry..
If i alway delete the first entry until the table is empty this is again no problem, but if i like to delete an entry in the middle or at the end, I get an exception saying the row is unavailable.. 

 

My Bean:

  | @Stateful
  | @Scope(ScopeType.CONVERSATION)
  | @Name("caseAction")
  | public class CaseAction implements ICase,Serializable{
  | 
  | 	
  | 	@PersistenceContext
  | 	private EntityManager em;
  | 	
  | 	@In
  | 	private User authUser;
  | 	
  | 	@Logger
  | 	private Log log;
  | 	
  | 	@In
  | 	private FacesMessages facesMessages;
  | 	
  | 	private PersistentFacesState state;
  | 	
  | 	@In(create=true)
  | 	@Out(required=false)
  | 	private Patient patient;
  | 	
  | 	@Out(value="selectedMedCase",required=false)
  | 	MedCase mcase;
  | 	
  | 	@In(create=true)
  | 	@Out(required=false)
  | 	private CaseType caseType;
  | 	
  | 	
  | 	@DataModel(value="professionals")
  | 	private List<HealthProfessional> professionals;
  | 	@DataModelSelection(value="professionals")
  | 	@Out(required=false)
  | 	private HealthProfessional selectedProfessional;
  | 	
  | 	@DataModel(value="searchProfessionals")
  | 	private List<HealthProfessional> searchProfessionals;
  | 	@DataModelSelection(value="searchProfessionals")
  | 	@Out(required=false)
  | 	private HealthProfessional selectedSearchedProfessionals;
  | 
  | 	private String description;
  | 	
  | 	
  | 	
  | 	public CaseAction(){
  | 		
  | 	}
  | 
  | 	@Begin(join=true)
  | 	@Factory("searchProfessionals")
  | 	public void initSearchProfessionals(){
  | 		searchProfessionals = em.createQuery("FROM HealthProfessional hp " +
  | 				"order by hp.lastname").getResultList();
  | 		professionals = new ArrayList<HealthProfessional>();
  | 	}
  | 
  | 	
  | 	@End
  | 	public String create(){
  | 		
  | 		log.info("create")
  | 		
  | 		return "/protected/prof/profMyCases.seam";
  | 	}
  | 		
  | 	
  | 	
  | 	public void deleteProf(){
  | 		professionals.remove(selectedProfessional);
  | 		state = PersistentFacesState.getInstance();
  | 		
  | 		log.info("delete Health Professional");
  | 		
  | 	}
  | 	
  | 	public void addProf(){
  | 		
  | 		if(!professionals.contains(selectedSearchedProfessionals)){
  | 			professionals.add(selectedSearchedProfessionals);
  | 		}
  | 		
  | 		log.info("added Health Professional: #{selectedSearchedProfessionals}");
  | 	}
  | 	
  | 	public void patientChanged(ValueChangeEvent event){
  | 		log.info("patient change event");
  | 	}
  | 	
  | 	public List<Patient> getMyPatients(){
  | 		HealthProfessional prof = (HealthProfessional)authUser;
  | 		
  | 		List<Patient> patients;
  | 		
  | 		
  | 		patients = em.createNamedQuery("findAllPatientOfProfessional")
  | 					.setParameter("prof", prof).getResultList();
  | 		
  | 		return patients;
  | 	}
  | 	
  | 	public List<CaseType> getCaseTypes(){
  | 		
  | 		List<CaseType> types;
  | 		
  | 		types = em.createNamedQuery("findAllCaseTypes").getResultList();
  | 		
  | 		return types;
  | 	}
  | 	
  | 	public String getDescription(){
  | 		return description;
  | 	}
  | 	
  | 	public void setDescription(String description){
  | 		this.description = description;
  | 	}
  | 	
  | 
  | 
  | 	@Destroy @Remove
  | 	public void destroy(){
  | 		
  | 	}
  | 
  | }
  | 

My website:

  | <?xml version="1.0" encoding="ISO-8859-1" ?>
  | <ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
  | 	xmlns:jsp="http://java.sun.com/JSP/Page"
  | 	xmlns:f="http://java.sun.com/jsf/core"
  | 	xmlns:h="http://java.sun.com/jsf/html"
  | 	xmlns:ice="http://www.icesoft.com/icefaces/component"
  | 	xmlns:s="http://jboss.com/products/seam/taglib"
  | 	template="../../layout/template.jsp">
  | 
  | 	<ui:define name="content">
  | 				
  | 				
  | 				<ice:panelAccordion expanded="true" styleClass="accordion">
  | 				<f:facet name="header">
  | 					<ice:outputText value="#{messages['profNewCase.title']}" />
  | 				</f:facet>
  | 
  | 					<ice:form id="form">
  | 
  | 
  | 					<ice:panelGrid columns="3">
  | 
  | 						<ice:outputText value="#{messages['profNewCase.patient']}" />
  | 						<ice:outputText value="#{messages['profNewCase.description']}" />
  | 						<ice:outputText value="#{messages['profNewCase.type']}" />
  | 						
  | 						<h:selectOneMenu id="patientListbox" required="true"
  | 						value="#{patient}" >
  | 							
  | 							
  | 							<s:selectItems value="#{caseAction.myPatients}" var="patient" 
  | 							label="#{patient.firstname} #{patient.lastname}" 
  | 							noSelectionLabel="#{messages['profNewCase.noSelection']}"/>
  | 							<s:convertEntity />
  | 
  | 						</h:selectOneMenu>
  | 						
  | 						<ice:inputText required="true" value="#{caseAction.description}" />
  | 
  | 
  | 						
  | 						<h:selectOneMenu id="typeListbox" required="true"
  | 						value="#{caseType}">
  | 							
  | 							
  | 							<s:selectItems value="#{caseAction.caseTypes}" var="caseType" 
  | 							label="#{caseType.type}" 
  | 							noSelectionLabel="#{messages['profNewCase.noSelection']}"/>
  | 							<s:convertEntity />
  | 
  | 						</h:selectOneMenu>
  | 
  | 
  | 					</ice:panelGrid>
  | 
  | 					<ice:outputText value="#{messages['profNewCase.notAdded']}" 
  | 					rendered="#{professionals != null and professionals.rowCount==0}"/>
  | 					
  | 					<ice:dataTable var="prof" value="#{professionals}"
  | 						sortColumn="#{list.sort}" sortAscending="#{list.ascending}"
  | 						scrollable="#{table.scrollable}"
  | 						scrollHeight="#{table.scrollableHeight}"
  | 						columnWidths="150px,150px,150px,150px"
  | 						rendered="#{professionals.rowCount>0}">
  | 
  | 						<f:facet name="header">
  | 							<ice:outputText value="#{messages['profNewCase.responsibleProf']}" />
  | 						</f:facet>
  | 
  | 
  | 						<ice:column>
  | 							<f:facet name="header">
  | 								<ice:outputText value="#{messages['profNewCase.firstname']}" />
  | 							</f:facet>
  | 							<ice:outputText value="#{prof.firstname}" />
  | 
  | 						</ice:column>
  | 
  | 						<ice:column>
  | 							<f:facet name="header">
  | 								<ice:outputText value="#{messages['profNewCase.lastname']}" />
  | 							</f:facet>
  | 							<ice:outputText value="#{prof.lastname}" />
  | 
  | 						</ice:column>
  | 						
  | 						<ice:column>
  | 							<f:facet name="header">
  | 								<ice:outputText value="#{messages['profNewCase.state']}" />
  | 							</f:facet>
  | 							<ice:outputText value="#{prof.state}" />
  | 
  | 						</ice:column>
  | 						
  | 						<ice:column>
  | 							<f:facet name="header">
  | 								<ice:outputText value="#{messages['profNewCase.edit']}" />
  | 							</f:facet>
  | 							<s:link value="[delete]" action="#{caseAction.deleteProf}" />
  | 
  | 						</ice:column>
  | 
  | 					</ice:dataTable>
  | 					
  | 									
  | 				<br />
  | 				<ice:commandButton type="submit" value="#{messages['profNewCase.create']}"
  | 							action="#{caseAction.create}" />
  | 				</ice:form>
  | 				
  | 				<ice:form id="searchForm">
  | 					
  | 				
  | 				<ice:panelAccordion expanded="true" styleClass="accordion">
  | 				<f:facet name="header">
  | 					<ice:outputText value="#{messages['profNewCase.search']}" />
  | 				</f:facet>
  | 
  | 
  | 					<ice:outputText value="No Health Professionals Found" 
  | 					rendered="#{searchProfessionals != null and searchProfessionals.rowCount==0}"/>
  | 					
  | 					<ice:dataTable var="sProfs" value="#{searchProfessionals}"
  | 						sortColumn="#{list.sort}" sortAscending="#{list.ascending}"
  | 						scrollable="#{table.scrollable}"
  | 						scrollHeight="#{table.scrollableHeight}"
  | 						columnWidths="150px,150px,150px,150px"
  | 						rendered="#{searchProfessionals.rowCount>0}">
  | 
  | 
  | 
  | 
  | 
  | 						<ice:column>
  | 							<f:facet name="header">
  | 								<ice:outputText value="#{messages['profNewCase.firstname']}" />
  | 							</f:facet>
  | 							<ice:outputText value="#{sProfs.firstname}" />
  | 
  | 						</ice:column>
  | 
  | 						<ice:column>
  | 							<f:facet name="header">
  | 								<ice:outputText value="#{messages['profNewCase.lastname']}" />
  | 							</f:facet>
  | 							<ice:outputText value="#{sProfs.lastname}" />
  | 
  | 						</ice:column>
  | 						
  | 						<ice:column>
  | 							<f:facet name="header">
  | 								<ice:outputText value="#{messages['profNewCase.edit']}" />
  | 							</f:facet>
  | 							<s:link value="[add]" action="#{caseAction.addProf}" />
  | 
  | 						</ice:column>
  | 
  | 					</ice:dataTable>
  | 
  | 					</ice:panelAccordion>
  | 					</ice:form>
  | 
  | 
  | 				</ice:panelAccordion>
  | 				
  | 
  | 	</ui:define>
  | </ui:composition>
  | 

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

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



More information about the jboss-user mailing list