[jbossseam-issues] [JBoss JIRA] Created: (JBSEAM-1289) Conversation Propagation andTrinidad Dialogs

Brian Smith (JIRA) jira-events at lists.jboss.org
Thu May 3 10:28:30 EDT 2007


Conversation Propagation andTrinidad Dialogs
--------------------------------------------

                 Key: JBSEAM-1289
                 URL: http://jira.jboss.com/jira/browse/JBSEAM-1289
             Project: JBoss Seam
          Issue Type: Feature Request
         Environment: JBoss 4.0.4GA
            Reporter: Brian Smith


Seam does not automatically support Trinidad's dialog feature in terms of propagating long running conversations to the dialog window.  

Forum User dajevtic has provided a custom phase listener and action listener to enable propagation but it requires a specific naming convention for the dialog page.  It would be nice to enable support directly using standard Seam notation like the s:conversationPropagation tag or @Begin(join = true)

Here are the relevant phase listener and action listener

*Phase Listener*

	private static final String CONVERSATION_ID_SESSION_PARAMETER = "conversationId";
	
	private Map createParameterMapForConversationRestore(String conversationId) {
		Map paramterMap = new Hashtable();
		paramterMap.put(CONVERSATION_ID_SESSION_PARAMETER, conversationId);
		return paramterMap;
	}
	
	private void restoreConversation(Context context) {
		if (context.isSet(CONVERSATION_ID_SESSION_PARAMETER)) {
			String convId = context.get(CONVERSATION_ID_SESSION_PARAMETER).toString();
			Manager.instance().restoreConversation(createParameterMapForConversationRestore(convId));
			context.remove(CONVERSATION_ID_SESSION_PARAMETER);		
		}
	}
	
	public void afterPhase(PhaseEvent event) {
		try {
			if (event.getPhaseId().equals(PhaseId.RESTORE_VIEW)) {
				UIViewRoot root = event.getFacesContext().getViewRoot();
				if (root != null) {
					String viewId = root.getViewId();
					if ((viewId != null) && viewId.endsWith("_dlg.jspx")) {
						restoreConversation(Contexts.getSessionContext());
					}
				}
			} else {
				log.info("after " + event.getPhaseId());
			}
		} catch (Exception e) {
			log.error("Could not restore Seam conversation", e);
		}
	}

*Action Listener*

	public void processAction(ActionEvent actionEvent)
			throws AbortProcessingException {

		if (actionEvent.getComponent() instanceof CoreCommandLink) {
			CoreCommandLink link = (CoreCommandLink)actionEvent.getComponent();
			if (link.isUseWindow()) {
				Contexts.getSessionContext().set("conversationId", Manager.instance().getCurrentConversationId());
			}
		}
		super.processAction(actionEvent);
	}

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the seam-issues mailing list