1 package fr.improve.struts.taglib.layout; 2 3 import javax.servlet.jsp.JspException ; 4 import javax.servlet.jsp.PageContext ; 5 6 import org.apache.struts.taglib.html.Constants; 7 import org.apache.struts.util.ResponseUtils; 8 9 import fr.improve.struts.taglib.layout.el.Expression; 10 import fr.improve.struts.taglib.layout.event.EndLayoutEvent; 11 import fr.improve.struts.taglib.layout.event.StartLayoutEvent; 12 import fr.improve.struts.taglib.layout.formatter.FormatException; 13 import fr.improve.struts.taglib.layout.util.LayoutUtils; 14 import fr.improve.struts.taglib.layout.util.NestedHelper; 15 import fr.improve.struts.taglib.layout.util.ParentFinder; 16 import fr.improve.struts.taglib.layout.util.TagUtils; 17 18 23 public class WriteTag extends org.apache.struts.taglib.bean.WriteTag implements LayoutTag { 24 protected String type; 25 protected String styleClass; 26 protected String style; 27 protected boolean layout = true; 28 29 protected String jspProperty; 30 protected String jspName; 31 32 protected static Class [] parameters = { PageContext .class, Object .class }; 33 34 public WriteTag() { 35 super(); 36 name = Constants.BEAN_KEY; 37 } 38 39 public void setLayout(boolean in_b) { 40 layout = in_b; 41 } 42 43 public boolean isLayout() { 44 return layout; 45 } 46 public String getStyle() { 47 return style; 48 } 49 50 public void setStyle(String in_style) { 51 this.style = in_style; 52 } 53 54 public String getStyleClass() { 55 return styleClass; 56 } 57 58 public void setStyleClass(String in_styleClass) { 59 this.styleClass = in_styleClass; 60 } 61 62 public final int doStartTag() throws JspException { 63 jspProperty = property; 65 property = Expression.evaluate(property, pageContext); property = NestedHelper.getAdjustedProperty(property, pageContext); 68 jspName = name; 70 name = Expression.evaluate(name, pageContext); 71 72 ParentFinder.registerTag(pageContext, this); 74 75 return doStartLayoutTag(); 77 } 78 79 public final int doEndTag() throws JspException { 80 try { 81 return doEndLayoutTag(); 83 } finally { 84 ParentFinder.deregisterTag(pageContext); 86 87 property = jspProperty; 89 jspProperty = null; 90 name = jspName; 91 jspName = null; 92 } 93 } 94 95 public int doEndLayoutTag() throws JspException { 96 return super.doEndTag(); 97 } 98 99 104 public int doStartLayoutTag() throws JspException { 105 doStartLayout(); 106 107 String lc_value = write(pageContext, name, property, type, scope); 108 if (filter) { 109 TagUtils.write(pageContext, ResponseUtils.filter(lc_value)); 110 } else { 111 TagUtils.write(pageContext, lc_value); 112 } 113 114 doEndLayout(); 115 return (SKIP_BODY); 117 } 118 122 private void doStartLayout() throws JspException { 123 if (layout) { 124 StringBuffer lc_buffer = new StringBuffer ("<th"); 125 if (styleClass!=null) { 126 lc_buffer.append(" class=\""); 127 lc_buffer.append(styleClass); 128 lc_buffer.append("\""); 129 } 130 if (style!=null) { 131 lc_buffer.append(" style=\""); 132 lc_buffer.append(style); 133 lc_buffer.append("\""); 134 } 135 136 lc_buffer.append(" colspan=\""); 137 lc_buffer.append(LayoutUtils.getSkin(pageContext.getSession()).getFieldInterface().getColumnNumber()); 138 lc_buffer.append("\">"); 139 new StartLayoutEvent(this, lc_buffer.toString()).send(); 140 } 141 } 142 143 147 private void doEndLayout() throws JspException { 148 if (layout) { 149 new EndLayoutEvent(this,"</th>").send(); 150 } 151 } 152 public void release() { 153 super.release(); 154 this.type = null; 155 this.style = null; 156 this.styleClass = null; 157 this.name = Constants.BEAN_KEY; 158 layout = true; 159 } 160 public void setType(String in_type) { 161 this.type = in_type; 162 } 163 public static String write(PageContext pageContext, Object value, String type) throws JspException { 164 if (value == null) { 165 return ""; } 167 if (type==null || type.length()==0) return value.toString(); 168 169 String lc_formattedValue = null; 171 try { 172 lc_formattedValue = LayoutUtils.getSkin(pageContext.getSession()).getFormatter().format(value, type, pageContext); 173 } catch (FormatException fe) { 174 throw new JspException ("Format " + type + " failed (" + fe.getMessage() + ")"); 175 } 176 return (lc_formattedValue == null ? "" : lc_formattedValue); 177 } 178 public static String write(PageContext pageContext, Object bean, String property, String type) throws JspException { 179 Object value = null; 181 try { 182 value = fr.improve.struts.taglib.layout.util.LayoutUtils.getProperty(bean, property); 183 } catch (JspException e) { 184 return ""; } 186 return write(pageContext, value, type); 187 } 188 public static String write(PageContext pageContext, String name, String property, String type, String scope) throws JspException { 189 Object bean = pageContext.findAttribute(name); 190 return write(pageContext, bean, property, type); 191 } 192 193 public PageContext getPageContext() { 194 return pageContext; 195 } 196 197 } 198 | Popular Tags |