I am developing a tag, see tag example below. This tag should produce a json object using the elements into the value stack.
I need to know how to repeat the execution of the content in this case <jsongl:jsonproperty/> , also every execution need to push a new item into the valuestack. So I develop the tag using Component#start() and Component#end() methods, the tag work but it isn't iterate the list of elements, and only produce this output with the last element: "array3": ["m2"] correct output: "array3": ["m1","m2"] tag example: <jsongl:jsonarray name="machines" items="%{machine}"> <jsongl:jsonproperty value="%{code}"/> </jsongl:jsonarray> source code: ================== //start public boolean start(Writer writer) { LOG.debug("starting"); boolean result = super.start(writer); try{ if (mItemsPropertySet) { coerceItemsToIterator(); // An items property has been set - if there's anything in it, then iterate over the items if (iterator != null && iterator.hasNext()){ iterateOverItems(); } } else { // No collection, so just process the body which should add items to the array // Writer passed here is used to prevent any body content being written to output stream } } catch (JspException e){ // Just rethrow if we got a JspException - it's probably from a nested tag - no new // info for us to add here. LOG.error("Just rethrow if we got a JspException - it's probably from a nested tag"); } catch (Exception e){ LOG.error("Unable to create JSON array"); } LOG.debug("finish"); return result; } // end method public boolean end(Writer writer, String body) { LOG.debug("starting"); boolean result = false; ValueStack stack = getStack(); if (iterator != null) { stack.pop(); } if (iterator != null && iterator.hasNext()) { Object currentItem = iterator.next(); stack.push(currentItem); LOG.debug("repeat with next element on array body"); return true; } //else { try { LOG.debug("Adding a new Json array object to parent JsonObject"); // Pop the array jsonEntity off of the stack this.getEntityStack().pop(); // add the child array object to the parent jsonObject this.getCurrentEntity().add(jsonEntity.getWrappedObject(), this.name); } catch (JSONException e) { LOG.error("Unable to create JSON array object", e); // TODO: handle exception } // } // helper method private void iterateOverItems() throws JspException, IOException { ValueStack valueStack = getStack(); // Iterator over 'items' collection while (iterator.hasNext()){ Object currentItem = iterator.next(); valueStack.push(currentItem); LOG.debug("item: " + currentItem); } } -- View this message in context: http://www.nabble.com/Problem-developing-a-tag-using-Struts-2-Arch-for-Tags-tf4939292.html#a14138771 Sent from the Struts - User mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]