package no.met.metadataeditor; import java.util.Collection; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.faces.application.ViewHandler; import javax.faces.application.ViewHandlerWrapper; import javax.faces.component.UIViewParameter; import javax.faces.context.FacesContext; import javax.faces.view.ViewMetadata; public class EditorViewHandler extends ViewHandlerWrapper { private ViewHandler wrapped; private Pattern editorUrlPattern = Pattern.compile(".*editor\\.xhtml.*"); public EditorViewHandler(ViewHandler wrapped){ this.wrapped = wrapped; } @Override public ViewHandler getWrapped() { return wrapped; } @Override public String getActionURL(FacesContext context, String viewId) { String originalActionURL = super.getActionURL(context, viewId); String newActionURL = addEditorViewParams(context, originalActionURL); return newActionURL; } public String addEditorViewParams(FacesContext context, String actionUrl){ Matcher m = editorUrlPattern.matcher(actionUrl); if(m.matches()){ actionUrl += "?"; Collection<UIViewParameter> viewParams = ViewMetadata.getViewParameters(FacesContext.getCurrentInstance().getViewRoot()); for (UIViewParameter viewParam : viewParams) { String name = viewParam.getName(); Object value = viewParam.getValue(); actionUrl += name + "=" + value + "&"; } } return actionUrl; } }