Hi,

have a look at models in the user guide there are some good approaches to 
update them.

Visibility:

ResourceLink pl = new ResourceLink("pdfLink", new 
ByteArrayResource("application/pdf")) {

// visibility method

}

kind regards

Tobias

> Am 10.05.2015 um 14:15 schrieb Chris <[email protected]>:
> 
> 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]
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to