1 7 package com.inversoft.verge.mvc.view.jsp.actionflow; 8 9 10 import java.util.Iterator ; 11 12 import javax.servlet.jsp.JspException ; 13 14 import org.apache.log4j.Logger; 15 16 import com.inversoft.beans.BeanException; 17 import com.inversoft.util.StringTools; 18 import com.inversoft.verge.mvc.MVCException; 19 import com.inversoft.verge.mvc.MVCRequest; 20 import com.inversoft.verge.mvc.config.BaseFormConfig; 21 import com.inversoft.verge.mvc.controller.actionflow.ActionFlowMetaData; 22 import com.inversoft.verge.mvc.controller.actionflow.ActionFlowURLTools; 23 import com.inversoft.verge.mvc.controller.actionflow.config.ActionFlowConfigStruct; 24 import com.inversoft.verge.mvc.model.ModelResolution; 25 import com.inversoft.verge.mvc.model.actionflow.ActionFlowModelMetaData; 26 import com.inversoft.verge.mvc.view.HtmlViewToolkit; 27 import com.inversoft.verge.mvc.view.ViewConstants; 28 import com.inversoft.verge.mvc.view.jsp.JspTools; 29 import com.inversoft.verge.mvc.view.jsp.model.ModelResolutionRegistry; 30 import com.inversoft.verge.util.WebBean; 31 32 33 38 public class FormTag extends com.inversoft.verge.mvc.view.jsp.html.FormTag { 39 40 43 private static final Logger logger = Logger.getLogger(FormTag.class); 44 45 private String form; 46 protected String localForm; 47 private String namespace; 48 protected String localNamespace; 49 private String var; 50 private ActionFlowMetaData metaData; 51 private BaseFormConfig config; 52 private boolean hasForm = false; 53 54 55 60 public String getForm() { 61 return form; 62 } 63 64 69 public void setForm(String form) { 70 this.form = form; 71 } 72 73 78 public String getNamespace() { 79 return namespace; 80 } 81 82 87 public void setNamespace(String namespace) { 88 this.namespace = namespace; 89 } 90 91 96 public String getVar() { 97 return var; 98 } 99 100 105 public void setVar(String var) { 106 this.var = var; 107 } 108 109 114 public BaseFormConfig getConfig() { 115 return config; 116 } 117 118 121 protected void initialize() throws JspException { 122 super.initialize(); 123 124 localForm = form; 125 localNamespace = namespace; 126 127 if (!JspTools.JSP_20) { 128 localForm = (String ) JspTools.expand("form", form, String .class, this, 129 pageContext); 130 localNamespace = (String ) JspTools.expand("namespace", namespace, 131 String .class, this, pageContext); 132 } 133 } 134 135 144 public int doStartTag() throws JspException { 145 146 initialize(); 147 148 hasForm = (localForm != null); 150 if (hasForm) { 151 if (localNamespace == null) { 152 throw new JspException ("<actionflow:form> form and namespace " + 153 "attributes required"); 154 } 155 156 setupForm(); 157 } 158 159 return super.doStartTag(); 160 } 161 162 167 void setupForm() throws JspException { 168 metaData = new ActionFlowMetaData(localNamespace, localForm); 169 170 try { 171 config = metaData.findFormConfig(pageContext.getRequest()); 172 } catch (MVCException mvce) { 173 logger.error(mvce); 174 throw new JspException ("Invalid form name: " + localForm, mvce); 175 } 176 177 if (localName == null) { 179 localName = localForm; 180 } 181 182 MVCRequest mvcRequest = JspTools.getMVCRequest(pageContext); 185 ActionFlowConfigStruct struct = new ActionFlowConfigStruct(config, metaData); 186 mvcRequest.setConfiguration(struct); 187 188 boolean hasVar = !StringTools.isEmpty(var); 193 Iterator iter = config.getFormBeans().iterator(); 194 WebBean webBean; 195 Object bean; 196 String id; 197 ActionFlowModelMetaData md; 198 ModelResolution modelResolution; 199 200 while (iter.hasNext()) { 201 webBean = (WebBean) iter.next(); 202 203 try { 204 bean = webBean.getInstance(pageContext); 205 } catch (BeanException be) { 206 logger.error(be); 207 throw new JspException (be); 208 } 209 210 if (hasVar) { 213 id = var; 214 } else { 215 id = webBean.getID(); 216 } 217 pageContext.setAttribute(id, bean); 218 219 md = new ActionFlowModelMetaData(webBean.getID(), null); 221 modelResolution = new ModelResolution(bean, md); 222 ModelResolutionRegistry.store(id, modelResolution, pageContext); 223 } 224 } 225 226 238 protected void createForm(StringBuffer buf, String id, String name, String url, 239 String method) 240 throws JspException { 241 242 if (super.getName() == null) { 244 name = localForm; 245 } 246 247 String localURL = ActionFlowURLTools.generateURL(localNamespace, localForm, 249 null, null); 250 251 super.createForm(buf, id, name, localURL, method); 252 253 HtmlViewToolkit.appendHiddenTag(buf, ViewConstants.MVC_HIDDEN_1, null); 254 HtmlViewToolkit.appendHiddenTag(buf, ViewConstants.MVC_HIDDEN_2, null); 255 } 256 } | Popular Tags |