OK. Here is a highly simplified case of the problem (source included):

The custom component 'repeat' will simply iterate through its children and 
renders them. 

Usage:

<netx:repeat binding="#{testBean.htmlRepeat}">
        <h:outputText value="Child-1"/>
        <h:outputText value="Child-2"/>
</netx:repeat>


Renderer output:

[begin - Child-1Child-2 - end] 


BackingBean:

The repeat component is bounded to a backing bean like so:

public class TestBean {

        private HtmlRepeat htmlRepeat;

        public HtmlRepeat getHtmlRepeat() {
                return null;
        }

        public void setHtmlRepeat(HtmlRepeat htmlRepeat) {
                this.htmlRepeat = htmlRepeat;
        }

        // -- action method
        public String formSubmitted() {
                System.out.println("formSubmitted()");

                HtmlOutputText child = new HtmlOutputText();
                child.setValue("Child-3");
                htmlRepeat.getChildren().add(child);
 
                return null;
        }
}

and the form is submitted using <h:commandButton value="Submit" action
="#{testBean.formSubmitted}"/>

The formSubmitted() method simply adds a child to htmlRepeat like so 
htmlRepeat.getChildren().add(child). Note that the child is added as the 
last child to the children list. But when the response is renderered, the 
newly added child appears at the beginning.

Expected Output:
        [begin - Child-1Child-2Child-3 - end] 

Actual Output:
        [begin - Child-3Child-1Child-2 - end] 

Attachments:

1. jsf-repeat.jar - Deployable JSF component packaged as jar (contains 
.java files, faces-config.xml and facelet taglib for the custom 
component).

        Download >> http://keerthi.linux.googlepages.com/jsf-repeat.jar

2. TestRepeat.xhtml - Facelet view using the <netx:repeat/> custom 
component

        Download >> http://keerthi.linux.googlepages.com/TestRepeat.xhtml

Note: The component requires facelets and so no TLD has been defined. 
Tested on myfaces1.2.6/Tomcat 6.20

Reply via email to