You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by "Igor Vaynberg (JIRA)" <ji...@apache.org> on 2010/11/14 06:49:14 UTC

[jira] Resolved: (WICKET-3162) NPE when the underlaying model changed and ajax re-appear.

     [ https://issues.apache.org/jira/browse/WICKET-3162?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Igor Vaynberg resolved WICKET-3162.
-----------------------------------

    Resolution: Invalid
      Assignee: Igor Vaynberg

your border uses AjaxFallbackLink. when you right click the link and do "open in new tab" it creates a regular request in which case the ajaxrequesttarget inside link's onclick will be null (like the javadoc explains), but your code doesnt check for it. other check for the target or use a regular non-fallback ajax link.

> NPE when the underlaying model changed and ajax re-appear. 
> -----------------------------------------------------------
>
>                 Key: WICKET-3162
>                 URL: https://issues.apache.org/jira/browse/WICKET-3162
>             Project: Wicket
>          Issue Type: Bug
>    Affects Versions: 1.4.13
>         Environment: wicket 1.4.13
>            Reporter: smallufo
>            Assignee: Igor Vaynberg
>         Attachments: CommentsPanel.html, CommentsPanel.java, Dao.java, DaoImpl.java, HomePage.html, HomePage.java, PulldownBorder.html, PulldownBorder.java, quickstart.zip, WicketApplication.java
>
>   Original Estimate: 0h
>  Remaining Estimate: 0h
>
> Hi , I have a simple panel , with a border and a listView :
> <span wicket:id="border">
>   <wicket:container wicket:id="commentsView">
>     <div>
>       //comment layout
>     </div>
>   </wicket:container>
> </span>
> And the code :
> add(border);
> ListView<Comment> commentsView = new ListView<Comment>("commentsView" , new LoadableDetachableModel<List<Comment>>()
> {
>   @Override
>   protected List<Comment> load() {
>     return commentDao.getComments(0 , 10);
>   }
> })
> {
>   @Override
>   protected void populateItem(ListItem<Comment> item) {
>     //comment layout
>   }
> };
> border.add(commentsView);
> commentsView.setReuseItems(false);
> The Panel has a border , with a clickable button , can be used to collapse/expand the content of the border with AJAX.
> Here is my steps :
> 1. I first collapse the panel .
> 2. Then open another browser panel , add a comment. (the underlaying data model is changed)
> 3. Back to the original panel , expand the panel ...
> And I got a NPE :
> 2010-11-12 05:19:12,661 ERROR wicket.RequestCycle - Exception in rendering component: [MarkupContainer [Component id = _body]]
> org.apache.wicket.WicketRuntimeException: Exception in rendering component: [MarkupContainer [Component id = _body]]
>         at org.apache.wicket.Component.renderComponent(Component.java:2725)
>         at org.apache.wicket.MarkupContainer.onRender(MarkupContainer.java:1538)
>         at org.apache.wicket.Component.render(Component.java:2517)
>         at org.apache.wicket.MarkupContainer.renderNext(MarkupContainer.java:1440)
>         at org.apache.wicket.MarkupContainer.renderComponentTagBody(MarkupContainer.java:1603)
>         at org.apache.wicket.MarkupContainer.onComponentTagBody(MarkupContainer.java:1527)
>         at org.apache.wicket.Component.renderComponent(Component.java:2686)
>         at org.apache.wicket.MarkupContainer.onRender(MarkupContainer.java:1538)
> ...
> Caused by: java.lang.NullPointerException
>         at org.apache.wicket.markup.html.border.Border$BorderBodyContainer.onComponentTagBody(Border.java:375)
>         at org.apache.wicket.Component.renderComponent(Component.java:2686)
>         ... 45 more
>         
>         
> Igor replied :
> s/border.add(commentsView);/border.getbodycontainer().add(commentsView);/
> I replied :
> I tried , but NPE is still thrown , with the same stacktrace...
> Is there anything I missed ?
> Here is my border's HTML :
> <div wicket:id="content">
>   <wicket:body/>
> </div>
> border's java code :
>     content = new WebMarkupContainer("content");
>     
>     content.setOutputMarkupPlaceholderTag(true);
>     content.setVisible(defaultExpanded); 
>     content.setRenderBodyOnly(false);
>     add(content);
>     content.add(getBodyContainer());
> and the ajax link's onClick() :
> Link<Void> collapseExpandLink = new AjaxFallbackLink<Void>("collapseExpandLink")
> {
>   @Override
>   public void onClick(AjaxRequestTarget target)
>   {
>     expanded=!expanded;
>     content.setVisible(expanded);
>     target.addComponent(content);
>   }
> };
> add(collapseExpandLink);

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