[jboss-user] [JBoss Seam] - Re: Page refresh when hitting F5

enrico256 do-not-reply at jboss.com
Tue Aug 14 08:37:34 EDT 2007


Here is an extract of the code:

home.xhtml shows the list of items
<rich:dataTable id="items" value="#{items}" var="_item" >
  | 	<rich:column>
  | 		<s:link action="#{itemFinder.selectItem}" value="#{_item.id}"/>
  | 	</rich:column>
  | 	<rich:column>
  | 		<h:outputText value="#{_item.title}" />
  | 	</rich:column>
  | 	<rich:column>
  | 		<h:outputText value="#{_item.date}" >
  | 			<f:convertDateTime pattern="dd.MM.yyyy" />
  | 		</h:outputText>
  | 	</rich:column>
  | 	....
  | </rich:dataTable>
ItemFinderAction manages the data model and the selected item:
@Stateful
  | @Name("itemFinder")
  | @Scope(ScopeType.SESSION)
  | public class ItemFinderAction implements ItemFinder {
  | 
  |     @PersistenceContext
  |     EntityManager em;
  |     
  |     @DataModel("items")
  |     List<Item> items;
  |     
  |     @DataModelSelection("items")
  |     @Out(required=false)
  |     Item item;
  |     
  |     @Factory("items")
  |     public void refresh() {
  |     	items = em.createQuery("from Item i order by i.date asc").getResultList();
  |     }
  |     
  |     @Begin
  |     public String selectItem() {
  |      	return "view_item";
  |     }
  |     
  |     @Remove @Destroy
  |     public void destroy() {
  |     }
  | }
Upon item selection, the item is viewed in viewitem.xhtml:
<h:form id="viewItem"> 
  | 	<h:panelGrid columns="2">
  | 		<h:outputText value="Title"/>
  | 		<h:outputText value="#{item.title}"/>
  | 		<h:outputText value="Date"/>
  | 		<h:outputText value="#{item.date}"/>
  | 		...
  | 	</h:panelGrid>
  | 	...
  | 	<s:link action="#{itemEditor.beginUpdate}"value="Update" />
  | 	....
  | </h:form>
  | 
ItemEditorAction manages the creation and update of items:
@Stateful
  | @Name("itemEditor")
  | public class ItemEditorAction implements ItemEditor {
  | 	
  |     @In(required=false)
  |     User user;
  | 	
  |     @In(required=false) @Out(required=false)
  |     Item item;
  |     
  |     @PersistenceContext
  |     EntityManager em;
  | 
  |     @Begin
  |     public String beginRegister() {
  | 		item = new Item();
  | 		item.setDate(new Date());
  | 		item.setNew(true);
  | 		return "edit_item";
  | 	}
  | 
  |     public String endRegister() {
  |     	em.persist(item);
  |     	refreshItems();
  |     	return "success";
  |     }
  |     
  |     public String beginUpdate() {
  | 	item.setNew(false);
  |     	return "edit_item";
  |     }
  |     
  |     public String endUpdate() {
  |     	em.merge(item);
  |     	refreshItems();
  |     	return "success";
  |     }
  |     
  |     @Remove @Destroy
  |     public void destroy() {
  |     }
  | 
  |     private void refreshItems() {
  | 	Events.instance().raiseEvent("loadItems");
  |     }
  | }
loadItems is defined in compontents.xml as 
    <event type="loadItems">
  |         <action expression="#{itemFinder.refresh}"/>
  |     </event>
Creation and update is done through the following xhtml page:
<h:form id="register">
  | 	<rich:panel>
  | 		<f:facet name="header">
  | 			<h:panelGroup>
  | 				<h:outputText value="New item" rendered="#{item.new}"/>
  | 				<h:outputText value="Item #{item.id}" rendered="#{!item.new}"/>
  | 			</h:panelGroup>
  | 		</f:facet>
  | 		<h:panelGrid columns="2">
  | 			<h:outputText value="Title" />
  | 			<h:inputText value="#{item.title}" size="100" maxlength="100"/>
  | ...
  | 		</h:panelGrid>
  | 		<h:commandButton action="#{itemEditor.endRegister}" value="Save" rendered="#{item.new}"/>
  | 		<h:commandButton action="#{itemEditor.endUpdate}" value="Save" rendered="#{!item.new}" />
  | 		<s:button action="/home.xhtml" value="Cancel" rendered="#{item.new}" propagation="end" />
  | 		<s:button action="/viewitem.xhtml" value="Cancel" rendered="#{!item.new}" />
  | 	</rich:panel>
  | </h:form>
  | 
Item is defined as 
@Entity
  | @Name("item")
  | @Table(name="ITEMS")
  | public class Item  implements Serializable {
  | 	private static final long serialVersionUID = 1L; 
  | 	private long id = 0L;  
  | 	private String title; 
  |         private Date date;
  | 	private boolean new;
  | 	//... setters and getters
  |         @Transient boolean isNew() {
  | 		return new;
  | 	}
  | }

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

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



More information about the jboss-user mailing list