[ 
https://issues.apache.org/jira/browse/WICKET-1190?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12546275
 ] 

Martijn Dashorst commented on WICKET-1190:
------------------------------------------

-100: this messes with the 1:1 component hierarchy definition we need to ensure 
no problems occur. Fragments and Panels are created to provide a break in 
component replacement. Use them for that.

> Replacing Component causes "close tag not found for tag" exception
> ------------------------------------------------------------------
>
>                 Key: WICKET-1190
>                 URL: https://issues.apache.org/jira/browse/WICKET-1190
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket
>    Affects Versions: 1.3.0-rc1
>            Reporter: xiefei
>
> There is always some part of a page that we need to replace its content with 
> some new block of html markup retrieved from an ajax call.  What i am 
> currently doing is using a fragment to represent the original block of html, 
> like this:
> <span wicket:id="container"></span>
> <wicket:fragment wicket:id="original-content-of-container">
>      original contents that can contain nested component like <span 
> wicket:id="nested-component"></span>
> <wicket:fragment>
> <a wicket:id="ReplaceContainer">Click me to replace container's content with 
> a new one</a>
> in the java code:
> public ThePage(){
>         Fragment container = new Fragment("container", 
> "original-content-of-container", this);
>         container.setOutputMarkupId(true);
>         container.add(new Label("nested-component", "nested component 
> content"));
>         add(container);
>         add(new AjaxLink("ReplaceContainer"){
>              onClick(target){
>                     NewPanel newContainer = new NewPanel("container");
>                     newContainer.add(...new nested components...);
>                     newContainer.setOutputMarkupId(true);
>                     ThePage.this.addOrReplace(newContainer);
>                     target.addComponent(newContainer);
>          }
>     }
> } 
> This works fine. The container can later be replaced by another component 
> such as a panel.  But requires an additional fragment to be defined and  
> disturbs the structure of the markup. IMO, the natural way is to just use a 
> WebMarkupContainer to render the original content, like this:
> <span wicket:id="container">
>      original contents that can contain nested component like <span 
> wicket:id="nested-component"></span>
> </span>
> <a wicket:id="ReplaceContainer">Click me to replace container's content with 
> a new one</a>
> in the java code:
> public ThePage(){
>         WebMarkupContainer container = new WebMarkupContainer("container");
>         container.setOutputMarkupId(true);
>         container.add(new Label("nested-component", "nested component 
> content"));
>         add(container);
>         add(new AjaxLink("ReplaceContainer"){
>              onClick(target){
>                     NewPanel newContainer = new NewPanel("container");
>                     newContainer.add(...new nested components...);
>                     newContainer.setOutputMarkupId(true);
>                     ThePage.this.addOrReplace(newContainer);
>                     target.addComponent(newContainer);
>          }
>     }
> }
> The above codes render the original container successfully. But the replace 
> action only works if the original container does not have any nested 
> components.  When it has some,  wicket throws an exception says : "close tag 
> not found for tag: <span id="container1" wicket:id="container"> ..."

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to