I wrote an implementation of FormDataAccessor for accessing Spring Web Flow. I posted it here if someone needs it.
Code:
package ro.theredpoint.util.xt; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import org.springframework.validation.Errors; import org.springframework.webflow.action.FormObjectAccessor; import org.springframework.webflow.context.ExternalContext; import org.springframework.webflow.context.ExternalContextHolder; import org.springframework.webflow.context.servlet.ServletExternalContext; import org.springframework.webflow.execution.FlowExecution; import org.springframework.webflow.execution.repository.FlowExecutionKey; import org.springframework.webflow.execution.repository.FlowExecutionRepository; import org.springframework.webflow.executor.FlowExecutorImpl; import org.springframework.webflow.executor.mvc.FlowController; import org.springframework.webflow.executor.support.FlowExecutorArgumentHandler; import org.springmodules.xt.ajax.FormDataAccessor; /** * * @author Elvis Ciocoiu * */ public class SWFFormDataAccessor implements FormDataAccessor { private static final Logger LOG = Logger.getLogger(SWFFormDataAccessor.class); public Object getCommandObject(HttpServletRequest request, HttpServletResponse response, Object handler, Map model) { Object command = extract(request, response, (FlowController) handler, new SWFAccessorCallback() { public Object extract(FlowExecution flowExecution) { return flowExecution.getActiveSession().getScope().get(FormObjectAccessor.getCurrentFormObjectName()); } }); return command; } public Errors getValidationErrors(HttpServletRequest request, HttpServletResponse response, Object handler, Map model) { Errors errors = (Errors) extract(request, response, (FlowController) handler, new SWFAccessorCallback() { public Object extract(FlowExecution flowExecution) { return (Errors) flowExecution.getActiveSession().getFlashMap().get( FormObjectAccessor.getCurrentFormErrorsName(), Errors.class); } }); return errors; } private Object extract(HttpServletRequest request, HttpServletResponse response, FlowController flowControllerflowControllertroller, SWFAccessorCallback callbak) { FlowExecutionRepository repository = ((FlowExecutorImpl)flowControllerflowControllertroller.getFlowExecutor()).getExecutionRepository(); FlowExecutorArgumentHandler argumentHandler = flowControllerflowControllertroller.getArgumentHandler(); ExternalContext externalContext = new ServletExternalContext(request.getSession().getServletContext(), request, response); if (argumentHandler.isFlowExecutionKeyPresent(externalContext)) { try { ExternalContextHolder.setExternalContext(externalContext); FlowExecutionKey flowExecutionKey = repository.parseFlowExecutionKey(argumentHandler.extractFlowExecutionKey(externalContext)); FlowExecution flowExecution = repository.getFlowExecution(flowExecutionKey); return callbak.extract(flowExecution); } catch (Exception e) { e.printStackTrace(); } finally { ExternalContextHolder.setExternalContext(null); } } return null; } interface SWFAccessorCallback { Object extract(FlowExecution flowExecution); } }
Comment