First of all, I would like to say that the more I explore Seam and Icefaces, 
the more I marvel at their fantastic features. They are really a good job! Seam 
Conversations and Ice D2D concepts are brightly ideas.

However, I think the integration between these two powerful frameworks is 
highly relevant and still deserves serious efforts. I've been using both 
components in a big project at my company for six months and I'm getting 
concerned about the hardly process to achieve stability during this period. 
Sometimes I don't know who I should ask for help. Like me, the users community 
is dreaming about make them talk to each other perfectly, as we can realize in 
the projects forum posts.

Currently, for example, I am struggling with a strange situation at Icefaces v 
1.6.0 DR#5 and Seam v. 1.2.1 GA (the latest ones at the moment).

- I have two pages. One shows a selectable list of some kind of object 
(ListPage) and the other enables the edit of the selected one (EditPage).

- By the way, my project is configured to use Seam Managed Persistence and 
Statefull Pageflow (JPDL).

- To support the ListPage I have a SSB default scoped backing bean 
(FinderAction), that keeps DataModel, generates the query, and so on... 

- To support the EditPage I have a SSB conversation scoped backing bean 
(EditorActon), that "bijects" the entity bean selected from the list and allows 
to update him.


It's simple to reproduce my main scenario:

1. From the ListPage grid I select a object (alfa) via s:link to open in a New 
browser Tab.

** A long running conversation is created in a conversational scope (as I 
checked at seam debug page) and the conversation Id is rendered as a hidden 
input in the view (cid).

2. From the same ListPage grid I select other object (beta) via s:link to open 
in another New browser Tab.

** New long running conversation and Id are created, too.


The situations are:

a) When I turn to the first EditPage (alfa object) and press any key at any 
input field, all the form hidden inputs are simply initialized by Icefaces 
bridge javascript (iceSubmit function: resetHiddenFieldsFor(aForm)).

As a consequence, Seam "Manager.restoreConversation" doesn't get the correct 
one for "alfa" object, because the conversation ID parameter comes empty, and 
returns the ID associated to the last EditPage I've oppened (beta object).

b) Then, after I disabled the invocation "resetHiddenFieldsFor(aForm)", the 
correct conversation context is recovered perfectly. But then I run into a 
second scenario:

b.1) I confirm the update of the first object (alfa) and the action method is 
invoked.

** The correct conversation context is recovered, the entity is saved by 
EntityManager, the conversation is ended and the page flow is redirected back 
to the list. 

b.2) Then I turn to the second EditPage (for the "beta" object) and I confirm 
update action.

** But the action method isn't invoked anymore. Before give up, I've tried to 
go through the source and I checked ClientSideInterceptor wasn´t been invoked 
as it was in the first updating. 

That's the second weird situation. I'm not sure if it is a bug, anyway.


Besides, the idea of using "named conversation ids" sounds great to me. If I 
had a possibility to create a business key as a identifier of object "bank" for 
example followed by the ID of the entity, I could have the same entity editing 
in different tabs, but using the same conversation, couldn't I ?


Any help or hint is greatly appreciated.


Thanks for the attention,


Roger.



Here are some code fragments:

>From FinderAction

  | 
  |     // seam managed persistence
  |     @In EntityManager entityManager;
  |     
  |         @DataModel
  |     private List<Banco> bancos;
  |     
  |         @SuppressWarnings("unchecked")
  |     public String find(){
  | 
  |             Query query = entityManager.createQuery("SELECT banco FROM 
Banco banco");
  |             bancos = query.getResultList();
  |             
  |             return null;
  |     }
  |             
  |     @Factory("bancos")
  |     public Object createBancos(){
  |             find();
  |             return bancos;
  |     }
  |     
  |     @Destroy @Remove
  |     public void destroy() {
  |     }
  | 

>From ListPage:

  |           <ice:column>
  |             <s:link value="Update" propagation="begin" pageflow="doEdit" 
action="prepareUpdate">
  |               <f:param name="entityId" value="#{row.id}" />
  |             </s:link>
  |           </ice:column>
  | 

>From EditAction:

  |     // seam managed persistence
  |     @In EntityManager entityManager;
  | 
  |     @Logger
  |     private Log log;
  |     
  |     @Out(required=false)
  |     private Banco banco;
  |     
  |     @RequestParameter
  |     private Long entityId;
  | 
  |         @In(required=true)
  |         private BancoFinderAction bancoFinderAction;
  | 
  |     
  |     public String prepareUpdate() {
  | 
  |             log.debug("prepareUpdate()");
  |             
  |             try {
  |                     Banco temp = (Banco) entityManager.find(Banco.class, 
entityId);         
  |                     banco = entityManager.merge(temp);
  | 
  |                     log.debug(banco.toString());
  |                     
  |             } catch (Exception e) {
  |                     e.printStackTrace();
  |             }
  | 
  |             return "prepared";
  |     }
  |     
  |     public String update() {
  |             
  |             log.debug("update()");
  | 
  |             try {
  |                     log.debug(banco.toString());
  |                     entityManager.flush();
  |                     
  |                     bancoFinderAction.find();
  |                     
  |             } catch (Exception e) {
  |                     e.printStackTrace();
  |             }
  |             
  |             return "updated";
  |     }
  | 
  |     @Destroy @Remove
  |     public void destroy() {
  |     }
  | 

>From EditPage:

  |     <ice:form>
  |       <ice:panelGroup>
  |     
  |         <ice:outputLabel for="code" value="Code*" />
  |         <s:decorate>
  |           <ice:inputText id="code" value="#{banco.codigo}" required="true" 
size="8" maxlength="3" />
  |           <br />
  |           <s:message />
  |         </s:decorate>
  |   
  |         <ice:outputLabel for="nome" value="Name* " />
  |         <s:decorate>
  |           <ice:inputText id="nome" value="#{banco.nome}" required="true" 
size="35" maxlength="30" />
  |           <br />
  |           <s:message />
  |         </s:decorate>
  |         <br/>
  |     
  |         <h:commandLink value="Save" action="ok" />
  |         <h:commandLink immediate="true" value="Cancel" action="cancel"/>  
  |     
  |       </ice:panelGroup>
  |     </ice:form> 
  | 


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

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

_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to