polx 2005/01/26 14:46:28 Modified: jelly/jelly-tags/swing/src/java/org/apache/commons/jelly/tags/swing ComponentTag.java Log: First stab at rerunnable tags. Using <panel tagName="myTag">DO SOMETHING${x}</panel> One can invoke, later, e.g. in an action-tag, ${myTag.rerun()} which should repopulate the panel by removing first then re-running the body ot this tag. paul Revision Changes Path 1.24 +49 -1 jakarta-commons/jelly/jelly-tags/swing/src/java/org/apache/commons/jelly/tags/swing/ComponentTag.java Index: ComponentTag.java =================================================================== RCS file: /home/cvs/jakarta-commons/jelly/jelly-tags/swing/src/java/org/apache/commons/jelly/tags/swing/ComponentTag.java,v retrieving revision 1.23 retrieving revision 1.24 diff -u -r1.23 -r1.24 --- ComponentTag.java 12 Jan 2005 08:59:16 -0000 1.23 +++ ComponentTag.java 26 Jan 2005 22:46:28 -0000 1.24 @@ -168,6 +168,40 @@ } } } + + + private String tagName = null; + + private XMLOutput currentOutput = null; + + /** Puts this tag into the context under the given name + * allowing later calls to [EMAIL PROTECTED] #rerun()}. + * For example, it makes sense to use ${myTag.rerun()} as a child + * of an <code>action</code> element. + * + * @param the name to be used + */ + public void setTagName(String name) { + this.tagName = name; + } + + /** Runs the body of this script again after clearing the content + * of this component. + * This is useful to use jelly-logic and "re-populate" a part of the user-interface + * after having updated a model part (e.g. an XML-document). + * @throws JellyTagException if anything + */ + public void rerun() throws JellyTagException { + Component comp = getComponent(); + if(comp instanceof java.awt.Container) { + ((java.awt.Container) comp).removeAll(); + } + this.doTag(currentOutput,false); + if ( comp instanceof javax.swing.JComponent ) { + ((javax.swing.JComponent) comp).revalidate(); + } + } + /** * Adds a WindowListener to this component @@ -290,6 +324,14 @@ * A class may be specified otherwise the Factory will be used. */ protected Object newInstance(Class theClass, Map attributes, XMLOutput output) throws JellyTagException { + if (attributes.containsKey("tagName")) { + this.setTagName((String)attributes.get("tagName")); + addIgnoreProperty("tagName"); + } + if(tagName!=null) { + context.setVariable(tagName,this); + currentOutput = output; + } try { if (theClass != null ) { return theClass.newInstance(); @@ -363,6 +405,7 @@ component.setSize(d); addIgnoreProperty("size"); } + if (attributes.containsKey("debugGraphicsOptions")) { try { @@ -398,8 +441,13 @@ * @see org.apache.commons.jelly.Tag#doTag(org.apache.commons.jelly.XMLOutput) */ public void doTag(XMLOutput output) throws JellyTagException { + this.doTag(output,true); + } + + public void doTag(XMLOutput output, boolean resetBean) throws JellyTagException { + if(resetBean) clearBean(); super.doTag(output); - clearBean(); + //clearBean(); } /** Sets the bean to null, to prevent it from
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]