1 10 package org.mmbase.bridge.jsp.taglib.edit; 11 12 import org.mmbase.bridge.jsp.taglib.util.Attribute; 13 import org.mmbase.bridge.jsp.taglib.*; 14 import org.mmbase.bridge.*; 15 16 import javax.servlet.jsp.JspTagException ; 17 18 19 29 30 public class FormTag extends TransactionTag implements Writer { 31 32 private Attribute mode = Attribute.NULL; 33 private int m; 34 35 private Attribute page = Attribute.NULL; 36 private Attribute clazz = Attribute.NULL; 37 38 public static final int MODE_HTML_FORM = 0; 39 public static final int MODE_URL = 1; 40 public static final int MODE_VALIDATE = 2; 41 42 43 protected boolean valid = true; 44 public void setValid(boolean valid) { 45 this.valid = valid; 46 } 47 public boolean isValid() { 48 return valid; 49 } 50 51 public void setMode(String m) throws JspTagException { 52 mode = getAttribute(m); 53 } 54 55 public void setStyleClass(String c) throws JspTagException { 56 clazz = getAttribute(c); 57 } 58 59 private int getMode() throws JspTagException { 60 String m = mode.getString(this).toLowerCase(); 61 if (m.equals("") || m.equals("form")) { 62 return MODE_HTML_FORM; 63 } else if (m.equals("url")) { 64 return MODE_URL; 65 } else if (m.equals("validate")) { 66 return MODE_VALIDATE; 67 } else { 68 throw new JspTagException ("Value '" + m + "' not known for 'mode' attribute"); 69 } 70 } 71 72 73 public void setPage(String p) throws JspTagException { 74 page = getAttribute(p); 75 } 76 77 78 public int doStartTag() throws JspTagException { 79 m = getMode(); 80 switch(m) { 81 case MODE_URL: 82 helper.setValue(page.getString(this)); 83 break; 84 case MODE_HTML_FORM: 85 String url = page.getString(this); 86 String id = getId(); 87 String c = clazz.getString(this); 88 try { 89 pageContext.getOut().write("<form " + (id != null ? "id=\"" + id + "\" " : "") + 90 "action=\"" + url + "\" method=\"post\" enctype=\"multipart/form-data\" class=\"mm_form" + 91 ("".equals(c) ? "" : " " + c) + 92 "\" >"); 93 } catch (java.io.IOException ioe) { 94 throw new TaglibException(ioe); 95 } 96 break; 97 } 98 valid = true; 99 return super.doStartTag(); 100 } 101 102 public int doEndTag() throws JspTagException { 103 try { 104 if (! transaction.isCanceled() && ! transaction.isCommitted()) { 105 if (commit.getBoolean(this, getDefaultCommit())) { 106 transaction.commit(); 107 } else { 108 transaction.cancel(); 109 } 110 } 111 } catch (Throwable t) { 112 try { 113 pageContext.getOut().write(t.getMessage()); 116 } catch (java.io.IOException ioe) { 117 throw new TaglibException(ioe); 118 } 119 } 120 switch(m) { 121 case MODE_HTML_FORM: 122 try { 123 pageContext.getOut().write("</form>"); 124 } catch (java.io.IOException ioe) { 125 throw new TaglibException(ioe); 126 } 127 } 128 if (getId() != null) { 129 getContextProvider().getContextContainer().unRegister(getId()); 130 } 131 transaction = null; 132 return super.doEndTag(); 133 } 134 135 protected boolean getDefaultCommit() { 137 return false; 138 } 139 140 protected String getName() throws JspTagException { 141 if (name == Attribute.NULL) return "org.mmbase.taglib.form"; 142 return (String ) name.getValue(this); 143 } 144 145 146 } 147 | Popular Tags |