On Sun, May 10, 2015 at 3:15 PM, Chris <[email protected]> wrote:
> Hi Tobias,
>
> I have followed your approach (update from parent) and it works. Thanks a
> lot.
> But could you show me also how to overwrite the visibility directly in the
> ResourceLink?
> ResourceLink pl = new ResourceLink("pdfLink", new
> ByteArrayResource("application/pdf") {…}?
>
Move "ByteArrayResource bar = new ByteArrayResource() {...}" a line above,
as a separate statement. Then override ResourceLink's #isVisible() method.
This way you'll notice your error in the old version.
>
> By the way, in the panel I have added another list view which does not use
> the model of the panel but has to calculate the model dynamically.
> With the following code, it seems also to be only called once in the
> constructor but not via ajaxUpdate. How to change this?
>
> ListModel<String> listModel = new ListModel<String>() {
> @Override
> public List<String> getObject() {
>
> Thanks, Chris
>
>
> > Am 09.05.2015 um 20:38 schrieb Tobias Soloschenko <
> [email protected]>:
> >
> > In your snippet you put the isVisible in the ByteArrayResource. That's
> why you get the error message - move it to your ResourceLink
> >
> > One easy way to update from parent would be: make a method in your panel
> which returns your link then make your panel a field in the parent and call
> the getter in the callback and add the link to your AjaxRequestTarget there.
> >
> > kind regards
> >
> > Tobias
> >
> >> Am 09.05.2015 um 20:19 schrieb Chris <[email protected]>:
> >>
> >> Hi,
> >>
> >> thanks, I am getting the message "method does not override method from
> its superclass."
> >>
> >> The problem is that I do not have the callback method in this panel but
> in its parent; I would need to have a getter method so that I can directly
> access the resource link from the panel instance and change its visibility.
> >>
> >> ResourceLink pl = new ResourceLink("pdfLink", new
> ByteArrayResource("application/pdf") {
> >>
> >> @Override
> >> protected boolean isVisible() {
> >> return ....;
> >> }
> >>
> >> });
> >>
> >> Chris
> >>
> >>
> >>> Am 09.05.2015 um 20:12 schrieb Tobias Soloschenko <
> [email protected]>:
> >>>
> >>> Yes - should work because isVisible is inherited from component:
> >>>
> >>>
> http://ci.apache.org/projects/wicket/apidocs/6.0.x/org/apache/wicket/markup/html/link/ResourceLink.html
> >>>
> >>> But watch out not to put in expensive calls in it! The user guide is
> also mentioning a lot about that topic:
> >>>
> >>>
> https://wicket.apache.org/guide/guide/bestpractices.html#bestpractices_5
> >>>
> >>> At this place it is good to mention the new location of the guide:
> >>>
> >>> http://ci.apache.org/projects/wicket/guide/6.x/
> >>>
> >>> http://ci.apache.org/projects/wicket/guide/7.x/
> >>>
> >>> kind regards
> >>>
> >>> Tobias
> >>>
> >>>> Am 09.05.2015 um 19:58 schrieb Chris <[email protected]>:
> >>>>
> >>>> Hi Tobias,
> >>>>
> >>>> thanks! Can the isVisible method be directly overridden also by a
> ResourceLink?
> >>>>
> >>>> ResourceLink pl = new ResourceLink(..) {
> >>>> protected boolean isVisible() {…}
> >>>> }
> >>>> Chris
> >>>>
> >>>>
> >>>>> Am 09.05.2015 um 19:46 schrieb Tobias Soloschenko <
> [email protected]>:
> >>>>>
> >>>>> Hi,
> >>>>>
> >>>>> the constructor of your panel is only called at a normal request -
> you have to set the visibility of your link in the ajax callback via
> AjaxRequestTarget.
> >>>>>
> >>>>> 1. setOutputMarkupId and setOutputMarkupPlaceholder of the link to
> true (in your constructor)
> >>>>>
> >>>>> 2. set the visibility to your component in the callback method
> (based on your Model)
> >>>>>
> >>>>> 3. add the component to the AjaxRequestTarget so that it is updated
> >>>>>
> >>>>> Another solution would be to override the isVisible method and
> return the visibility based on your model and then only add the component
> to the AjaxRequestTarget.
> >>>>>
> >>>>> kind regards
> >>>>>
> >>>>> Tobias
> >>>>>
> >>>>>> Am 09.05.2015 um 19:29 schrieb Chris <[email protected]>:
> >>>>>>
> >>>>>> Hi all,
> >>>>>>
> >>>>>> currently, the visibility of the resource link is not updated when
> the parent component of the panel is rendered again based on an ajax call.
> >>>>>>
> >>>>>> How can the visibility set dynamically based on the model’s data?
> >>>>>>
> >>>>>> Thanks, Chris
> >>>>>>
> >>>>>> public SomePanel(String id, final IModel<List<A>> model) {
> >>>>>> super(id, model);
> >>>>>>
> >>>>>> ResourceLink pl = new ResourceLink("pdfLink", new
> ByteArrayResource("application/pdf") {...}
> >>>>>> pl.setVisible(routingModel.getObject().get(0).getElements().size()
> > 0);
> >>>>>> ...
> >>>>>> }
> >>>>>>
> ---------------------------------------------------------------------
> >>>>>> To unsubscribe, e-mail: [email protected]
> >>>>>> For additional commands, e-mail: [email protected]
> >>>>>
> >>>>> ---------------------------------------------------------------------
> >>>>> To unsubscribe, e-mail: [email protected]
> >>>>> For additional commands, e-mail: [email protected]
> >>>
> >>> ---------------------------------------------------------------------
> >>> To unsubscribe, e-mail: [email protected]
> >>> For additional commands, e-mail: [email protected]
> >>
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: [email protected]
> >> For additional commands, e-mail: [email protected]
> >>
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [email protected]
> > For additional commands, e-mail: [email protected]
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>