Yes thats the right way - LDM saves the model object for the whole request! 
(Load method is invoked once per request) - good! 

kind regards

Tobias

> Am 10.05.2015 um 14:47 schrieb Chris <[email protected]>:
> 
> hi, thanks a lot.
> 
> I have done it with a LDM and overriding the isVisible and onDetach method:
> 
>        model = new LoadableDetachableModel<List<String>>() {
> 
>            @Override
>            protected List<String> load() {
>                List<String> locationsNotInRoute = Lists.newArrayList();
>                List<String> locationsInRoute = Lists.newArrayList();
> 
>                for (Route route : routingModel.getObject()) {
>                    for (Location location : route.getLocations()) {
>                        locationsInRoute.add(location.getOntologicalName());
>                    }
>                }
> 
> 
>                for (Poi poi : user.getSelectedPois()) {
>                    if 
> (!locationsInRoute.contains(poi.getOntologyLocalName())) {
>                        locationsNotInRoute.add(poi.getName());
>                    }
>                }
> 
>                return locationsNotInRoute;
>            }
> 
>        };
>        
>        
>        ListView<String> locationsNotInRoutesView = new 
> ListView<String>("locationsNotInRoutes", model) {
> 
>                    @Override
>                    protected void populateItem(ListItem<String> listItem) {
>                        listItem.add(new Label("locationNotInRoute", 
> listItem.getModel()));
> 
>                        listItem.setOutputMarkupId(true);
>                    }
> 
>                    @Override
>                    public boolean isVisible() {
>                        return calculationDone && model.getObject().size() > 0;
>                    }
> 
>                };
> 
> 
> @Override
> public void onDetach() {
>    if(model != null)
>       model.detach();
> 
>    super.onDetach();
> }
> 
> 
> 
> 
>> Am 10.05.2015 um 14:25 schrieb Tobias Soloschenko 
>> <[email protected]>:
>> 
>> 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]
> 

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

Reply via email to