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") {…}?

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]

Reply via email to