Another conversation question ...
greko Nov 2, 2007 12:24 PMHi all !
I have a screen displaying a list of devices. A device can be edited (from a button in the datatable)
When a submit a find on my deviceList screen, I start a new conversation.
When I edit a device, a create a nested conversation : once on my edit screen, I want to be able to go back to my previous search (aka the parent conversation).
The problem :
When a perform a save, on my edit screen, everything seems ok (faces message ok, entity updated). But then, when I click on my cancel/back button, to go back to my list, it is empty ... I mean, everything is still in the conversation (my search panel, even the rowCount of the list) but the list contains null elements ...
Here is part of my code :
pages.xml
... <page view-id="/parc_deviceList.xhtml" no-conversation-view-id="/parc_deviceList.xhtml"> <description>Device Search (Results: #{deviceSearch.rowCount})</description> </page> ... <page view-id="/parc_deviceEdit.xhtml"> <description>Edit Device</description> <param name="deviceId" value="#{deviceHome.deviceId}"/> <action execute="#{deviceHome.init}"/> <begin-conversation flush-mode="MANUAL" join="true"/> <navigation> <rule if-outcome="updated"> <redirect view-id="/parc_deviceEdit.xhtml"> </redirect> </rule> </navigation> </page> ...
parc_deviceList.xhtml
... <h:commandLink id="find" styleClass="button" action="#{deviceSearch.find()}" tabindex="6"> <s:conversationPropagation type="join" /> <h:outputText styleClass="buttonLabel" value="#{messages['findButton']}"/> </h:commandLink> ... <h:dataTable id="deviceTable" var="d" value="#{devicesList}" ... <h:column> <f:facet name="header"> </f:facet> <s:link view="/parc_deviceEdit.xhtml" propagation="nest" title="#{messages['device.edit']}"> <h:graphicImage value="/img/bt_mini_edit.gif" style="border:0; padding:2px;" /> <f:param name="deviceId" value="#{d.id}"/> </s:link> </h:column> ...
parc_deviceEdit.xhtml
<h:form id="deviceEditForm"> <div class="formFields wideLabels formBorder"> <s:validateAll> ... </s:validateAll> </div> <div class="formControls wideLabels"> <div class="entry"> <div class="label"> </div> <div class="input"> <h:commandLink id="update" styleClass="button" action="#{deviceHome.update}" tabindex="9"> <span class="buttonLabel">#{messages['saveButton']}</span> </h:commandLink> <s:link id="cancel" styleClass="button" view="/parc_deviceList.xhtml" tabindex="9"> <span class="buttonLabel">#{messages['cancelButton']}</span> </s:link> </div> </div> </div>
DeviceHome.java
@Name("deviceHome") @Scope(ScopeType.CONVERSATION) public class DeviceHome extends EntityHome<RTHDevice> { @Logger private Log logger; public Long getDeviceId() { return (Long)getId(); } public void setDeviceId(Long deviceId) { setId(deviceId); } public void init() { logger.debug("DeviceHome.init()"); if (isManaged()) { } else { } } public String persist() { logger.debug("DeviceHome.persist()"); getInstance().setActive(0); return super.persist(); } public String update() { logger.debug("DeviceHome.update()"); return super.update(); } }
DeviceSearchAction.java
@Stateful @Scope(ScopeType.CONVERSATION) @Name("deviceSearch") @Restrict("#{identity.loggedIn}") public class DeviceSearchAction implements DeviceSearch, Serializable { ... @DataModel List<RTHDevice> devicesList; ...
I can't figure out why this happens.
Could you help me a few ?
I'm currently using seam 2.0.0.CR1 on JBoss 4.2.1.GA.
Thanks for your help !