4.9 KiB
4.9 KiB
+++ title = "webflow" draft = false tags = [ "code", "jsp", "webflow" ] date = "2013-03-12" +++
Spring Webflow
Pitfalls rond flow xml declaraties
Gelieve in het geval van "problemen" de volgende checklist te raadplegen:
- bind = false
setupForm
gedaan? Anders wordenPropertyEditors
niet correct gebruiktresetForm
leegmaken gui model- scope opgeven in model attribute
- in action:
setFormObjectName
/setFormObjectScope
en indienresetForm
ooksetFormObjectClass
- Ajax requets:
vac_ajax_request
op true zetten -> anders geen fragments - Ajax: extend van
AbstractWebflowAjaxAction
Te combineren metsetFormObjectName
stap - nestedPartialPage tag ->
commandName
ofwel hardcoded ofwel als var vanuit tiles meegegeven
AbstractWebflowAjaxAction
package be.oei.webmvc;
import org.springframework.validation.BindingResult;
import org.springframework.validation.DataBinder;
import org.springframework.validation.Errors;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.webflow.action.FormAction;
import org.springframework.webflow.action.FormObjectAccessor;
import org.springframework.webflow.core.collection.MutableAttributeMap;
import org.springframework.webflow.execution.Event;
import org.springframework.webflow.execution.RequestContext;
import org.springframework.webflow.execution.ScopeType;
import org.springframework.webflow.execution.View;
public abstract class AbstractWebFlowAjaxAction extends FormAction {
protected static final String COMMAND_NAME = "commandName";
protected static final String ERRORS_PREFIX = BindingResult.MODEL_KEY_PREFIX;
@Override
protected final Object getFormObject(RequestContext context) throws Exception {
String formObjectName = getFormObjectName();
ScopeType formObjectScope = getFormObjectScope();
Object result = null;
if (formObjectName != null) {
result = formObjectScope.getScope(context).get(formObjectName);
}
if (result ###### null) {
result = ((MutableAttributeMap) context.getFlowScope().get("viewScope")).get("currentFormObject");
}
if (result ###### null) {
result = context.getFlowScope().get("currentFormObject");
}
if (result ###### null) {
result = super.getFormObject(context);
}
return result;
}
protected final String commandNameFromRequest(RequestContext context) {
return context.getRequestParameters().get(COMMAND_NAME);
}
@Override
public Event bindAndValidate(RequestContext context) throws Exception {
Event result = super.bindAndValidate(context);
initFragmentToRender(context);
return result;
}
@Override
public Event bind(RequestContext context) throws Exception {
Event result = super.bind(context);
this.initFragmentToRender(context);
return result;
}
@Override
protected DataBinder createBinder(RequestContext context, Object formObject) throws Exception {
DataBinder binder = new WebDataBinder(formObject, commandNameFromRequest(context));
if (getMessageCodesResolver() != null) {
binder.setMessageCodesResolver(getMessageCodesResolver());
}
initBinder(context, binder);
registerPropertyEditors(context, binder);
return binder;
}
@Override
protected FormObjectAccessor getFormObjectAccessor(final RequestContext context) {
final String commandNameFromRequest = commandNameFromRequest(context);
return new FormObjectAccessor(context) {
@Override
public Errors getFormErrors(String formObjectName, ScopeType scopeType) {
return super.getFormErrors(commandNameFromRequest, scopeType);
}
@Override
public Object getFormObject(String formObjectName, @SuppressWarnings("rawtypes") Class formObjectClass, ScopeType scopeType) {
return super.getFormObject(commandNameFromRequest, formObjectClass, scopeType);
}
@Override
public Object getFormObject(String formObjectName, ScopeType scopeType) {
return super.getFormObject(commandNameFromRequest, scopeType);
}
@Override
public Object getCurrentFormObject(ScopeType scopeType) {
return super.getFormObject(getCurrentFormObjectName(), scopeType);
}
@Override
public Errors getCurrentFormErrors(ScopeType scopeType) {
return super.getFormErrors(getCurrentFormObjectName(), scopeType);
}
@Override
public void putFormObject(Object formObject, String formObjectName, ScopeType scopeType) {
super.putFormObject(formObject, commandNameFromRequest, scopeType);
}
@Override
public void putFormErrors(Errors errors, ScopeType scopeType) {
scopeType.getScope(context).put(ERRORS_PREFIX + commandNameFromRequest, errors);
setCurrentFormErrors(errors, scopeType);
}
};
}
protected void initFragmentToRender(RequestContext context) {
context.getFlashScope().put(View.RENDER_FRAGMENTS_ATTRIBUTE, new String[] { fragmentToRender() });
context.getFlashScope().put(COMMAND_NAME, commandNameFromRequest(context));
}
protected abstract String fragmentToRender();
}