1 package com.opensymphony.webwork.views.freemarker.tags; 2 3 import com.opensymphony.webwork.components.Component; 4 import freemarker.template.TemplateModelException; 5 import freemarker.template.TemplateTransformModel; 6 import freemarker.template.TransformControl; 7 8 import java.io.IOException ; 9 import java.io.StringWriter ; 10 import java.io.Writer ; 11 import java.util.Map ; 12 13 18 public class ParamModel implements TemplateTransformModel { 19 public Writer getWriter(Writer writer, Map map) throws TemplateModelException, IOException { 20 String name = map.get("name").toString(); 21 String value = null; 22 if (map.containsKey("value")) { 23 value = map.get("value").toString(); 24 } 25 26 if (writer instanceof CallbackWriter) { 27 CallbackWriter cw = (CallbackWriter) writer; 28 Component bean = cw.getBean(); 29 return new ParamWriter(bean, name, value); 30 } else { 31 throw new RuntimeException ("Param tag not used inside of valid element"); 32 } 33 } 34 35 public static class ParamWriter extends Writer implements TransformControl { 36 StringWriter writer = new StringWriter (); 37 38 Component bean; 39 String name; 40 String value; 41 42 public ParamWriter(Component bean, String name, String value) { 43 this.bean = bean; 44 this.name = name; 45 this.value = value; 46 } 47 48 public void write(char cbuf[], int off, int len) throws IOException { 49 writer.write(cbuf, off, len); 50 } 51 52 public void flush() throws IOException { 53 writer.flush(); 54 } 55 56 public void close() throws IOException { 57 writer.close(); 58 } 59 60 public int onStart() throws TemplateModelException, IOException { 61 return EVALUATE_BODY; 62 } 63 64 public int afterBody() throws TemplateModelException, IOException { 65 if (value != null) { 66 bean.addParameter(name, value); 67 } else { 68 bean.addParameter(name, writer.toString()); 69 } 70 71 return END_EVALUATION; 72 } 73 74 public void onError(Throwable throwable) throws Throwable { 75 throw throwable; 76 } 77 } 78 } 79 | Popular Tags |