This looks good. Sorry I haven't responded sooner but I'm in another
busy patch with my day job.
What about a convenience method for cancelling the dialog as well?
Sean
On 9/11/06, Craig McClanahan <[EMAIL PROTECTED]> wrote:
On 9/11/06, Craig McClanahan <[EMAIL PROTECTED]> wrote:
>
>
> public String checkout() {
>
> // Cancel the current dialog (if any, whatever it is)
> FacesContext context = FacesContext.getCurrentInstance();
> DialogContextManager manager = (DialogContextManager)
> context.getApplication().getVariableResolver().resolveVariable(
> Constants.MANAGER_BEAN);
> DialogContext dcontext = (DialogContext)
> context.getApplication().getVariableResolver().resolveVariable(
> Constants.CONTEXT_BEAN);
> if (dcontext != null) {
> manager.remove(dcontext);
> }
>
> // Programmatically start the "CheckOut" dialog and advance
> // it to the point where it needs to display a view
> dcontext = manager.create(context, "CheckOut");
> String viewId = dcontext.advance(context, null);
>
> // Navigate to the requested view
> ViewHandler vh = context.getApplication ().getViewHandler();
> UIViewRoot view = vh.createView(context, viewId);
> view.setViewId(viewId);
> context.setViewRoot(view);
> context.renderResponse();
> return null;
>
> }
>
OK, I've addressed the verbosity of programmatically starting a new dialog.
The programmatic start and navigate now collapses to:
// Create and start the "CheckOut" dialog
dcontext = manager.create(context, "CheckOut");
dcontext.start(context);
return null;
We should consider pushing the actual navigation on an ongoing DialogContext
instance to inside the advance() method as well, although in practice that
would only simplify a bit of logic inside Dialog2NavigationHandler, not any
application level code.
Craig