1 package org.apache.struts2.components; 2 3 import java.io.Writer; 4 import java.util.ArrayList; 5 import java.util.Iterator; 6 import java.util.List; 7 import java.util.Map; 8 9 import javax.servlet.http.HttpServletRequest; 10 import javax.servlet.http.HttpServletResponse; 11 12 import org.apache.struts2.StrutsException; 13 14 import com.opensymphony.xwork2.util.OgnlUtil; 15 import com.opensymphony.xwork2.util.ValueStack; 16 17 /*** 18 * <!-- START SNIPPET: javadoc --> 19 * <p>Renders an debug tag.</P> 20 * 21 * The debug information contain mostly stack information: 22 * <ul> 23 * <li>Value Stack Contents</li> 24 * <li>Stack Context</li> 25 * </ul> 26 * <!-- END SNIPPET: javadoc --> 27 * 28 * <p/> <b>Examples</b> 29 * 30 * <pre> 31 * <!-- START SNIPPET: example --> 32 * <ww:debug/> 33 * <!-- END SNIPPET: example --> 34 * </pre> 35 * 36 * @s.tag name="debug" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.DebugTag" 37 * description="Render debug tag" 38 */ 39 public class Debug extends UIBean { 40 public static final String TEMPLATE = "debug"; 41 42 public Debug(ValueStack stack, HttpServletRequest request, HttpServletResponse response) { 43 super(stack, request, response); 44 } 45 46 protected String getDefaultTemplate() { 47 return TEMPLATE; 48 } 49 50 public boolean start(Writer writer) { 51 boolean result = super.start(writer); 52 53 ValueStack stack = getStack(); 54 Iterator iter = stack.getRoot().iterator(); 55 List stackValues = new ArrayList(stack.getRoot().size()); 56 while (iter.hasNext()) { 57 Object o = iter.next(); 58 Map values; 59 try { 60 values = OgnlUtil.getBeanMap(o); 61 } catch (Exception e) { 62 throw new StrutsException("Caught an exception while getting the property values of " + o, e); 63 } 64 stackValues.add(new DebugMapEntry(o.getClass().getName(), values)); 65 } 66 67 addParameter("stackValues", stackValues); 68 69 return result; 70 } 71 72 private class DebugMapEntry implements Map.Entry { 73 private Object key; 74 private Object value; 75 76 DebugMapEntry(Object key, Object value) { 77 this.key = key; 78 this.value = value; 79 } 80 81 public Object getKey() { 82 return key; 83 } 84 85 public Object getValue() { 86 return value; 87 } 88 89 public Object setValue(Object newVal) { 90 Object oldVal = value; 91 value = newVal; 92 return oldVal; 93 } 94 } 95 96 }