1 29 30 package com.caucho.jstl.el; 31 32 import com.caucho.el.Expr; 33 import com.caucho.jsp.PageContextImpl; 34 import com.caucho.jstl.NameValueTag; 35 import com.caucho.util.L10N; 36 37 import javax.el.ELContext; 38 import javax.servlet.jsp.JspException ; 39 import javax.servlet.jsp.tagext.BodyTagSupport ; 40 import javax.servlet.jsp.tagext.Tag ; 41 42 45 public class CoreParamTag extends BodyTagSupport { 46 private static L10N L = new L10N(CoreParamTag.class); 47 48 private Expr _nameExpr; 49 private Expr _valueExpr; 50 51 56 public void setName(Expr name) 57 { 58 _nameExpr = name; 59 } 60 61 66 public void setValue(Expr value) 67 { 68 _valueExpr = value; 69 } 70 71 74 public int doStartTag() 75 throws JspException 76 { 77 try { 78 if (_valueExpr == null) 79 return EVAL_BODY_BUFFERED; 80 81 PageContextImpl pageContext = (PageContextImpl) this.pageContext; 82 ELContext env = pageContext.getELContext(); 83 84 String name = _nameExpr.evalString(env); 85 86 if (name == null) 87 return SKIP_BODY; 88 89 String value = _valueExpr.evalString(env); 90 91 Tag parent = getParent(); 92 for (; parent != null; parent = parent.getParent()) { 93 if (parent instanceof NameValueTag) { 94 NameValueTag tag = (NameValueTag) parent; 95 96 if (value == null) 97 tag.addParam(name, ""); 98 else 99 tag.addParam(name, value); 100 101 return SKIP_BODY; 102 } 103 } 104 105 throw new JspException (L.l("c:param requires c:url or c:import parent.")); 106 } catch (JspException e) { 107 throw e; 108 } catch (Exception e) { 109 throw new JspException (e); 110 } 111 } 112 113 116 public int doEndTag() 117 throws JspException 118 { 119 try { 120 if (_valueExpr != null) 121 return EVAL_PAGE; 122 123 String value; 124 125 if (bodyContent != null) 126 value = bodyContent.getString().trim(); 127 else 128 value = ""; 129 130 PageContextImpl pageContext = (PageContextImpl) this.pageContext; 131 ELContext env = pageContext.getELContext(); 132 133 String name = _nameExpr.evalString(env); 134 135 Object parent = getParent(); 136 if (! (parent instanceof NameValueTag)) 137 throw new JspException (L.l("c:param requires c:url or c:import parent.")); 138 139 if (name == null) 140 return EVAL_PAGE; 141 142 NameValueTag tag = (NameValueTag) parent; 143 144 if (value == null) 145 tag.addParam(name, ""); 146 else 147 tag.addParam(name, value); 148 149 return EVAL_PAGE; 150 } catch (Exception e) { 151 throw new JspException (e); 152 } 153 } 154 } 155 | Popular Tags |