I read this article and my first approach was like

"If an outside component controls another’s visibility the best way is 
to override the controlling component’s onConfigure() and call 
controlled.setVisible()"

But this doesnt worked, because onConfigure() of my RadioChoice runs 
only once.

What I can do to force onConfigure() of RadioChoice again is, also 
adding it to the AjaxRequestTarget.

r.add(new AjaxFormChoiceComponentUpdatingBehavior(){
                  @Override
                  protected void onUpdate(AjaxRequestTarget target) {
        ->               target.add(r);
                          target.add(wmc);
                  }
          }

This works, too...

I am not sure now, whats the better way... *lol*

Determine "my" visibility in my onConfigure() by watching the state of 
the controller by myself, and adding only one object to the 
AjaxRequestTarget.

or

Let set the visibility of "me" by a controller and adding two objects to 
the AjaxRequestTarget, so the onConfigure() of the controller can do its 
visibility setting job.

Pull or Push?

regards
Patrick


Am 28.03.2013 14:40, schrieb Martin Grigorov:
> See
> http://wicketinaction.com/2011/11/implement-wicket-component-visibility-changes-properly/
>
>
> On Thu, Mar 28, 2013 at 3:36 PM, Patrick Davids 
> <[email protected]>wrote:
>
>> I am not sure what exactly was wrong.
>> Perhaps I had too much code with several active setVisibility...() XYZs
>> code parts.
>>
>> I started from the beginning and found the beautiest way for me, looking
>> like this.
>>
>> final RadioChoice<String> r = new RadioChoice<String>("id",
>> Model.of(""), Arrays.asList(new String[{"visible","invisible"}));
>>
>> r.setModelObject("visible");
>>
>> final WebMarkupContainer wmc = new WebMarkupContainer("wmc"){
>>          @Override
>>          protected void onConfigure() {
>>                  if(r.getValue().equals("0")){
>>                          setVisibilityAllowed(true);
>>                  }
>>                  if(r.getValue().equals("1")){
>>                          setVisibilityAllowed(false);
>>                  }
>> }
>> wmc.setOutputMarkupPlaceholderTag(true);
>>
>> r.add(new AjaxFormChoiceComponentUpdatingBehavior(){
>>                  @Override
>>                  protected void onUpdate(AjaxRequestTarget target) {
>>                          target.add(wmc);
>>                  }
>>          }
>> );
>>
>>
>> ================
>> onConfigure() is always be executed, and can toggle the visibility.
>>
>> AjaxFormChoiceComponentUpdatingBehavior.onUpdate() just pushes back the
>> wmc, and due to onConfigure() of the wmc it determines its visibility
>> depending on the new state of RadioCoice r.
>>
>> kind regards
>> Patrick
>>
>>
>> Am 28.03.2013 13:44, schrieb Martin Grigorov:
>>> Hi,
>>>
>>> All you have explained should just work.
>>> It seems the component is still invisible after setVisible(true). Maybe
>> you
>>> override it later ?! As you said in #onConfigure() or #isVisible()
>> returns
>>> false ?
>>> Please show some code.
>>>
>>>
>>> On Thu, Mar 28, 2013 at 12:30 PM, Patrick Davids
>>> <[email protected]>wrote:
>>>
>>>> Additional info:
>>>>
>>>> Its now working partially...
>>>>
>>>> I removed the onConfigure() of the markup container to determine the
>>>> initial visibility of itself depending on the radio default choice.
>>>>
>>>> So, my question changes to:
>>>> Whats the best way todo such an initial visibility without affecting the
>>>> ajax visibility changing?
>>>>
>>>> Patrick
>>>>
>>>>
>>>> Am 28.03.2013 11:18, schrieb Sven Meier:
>>>>>> My behavior on the gui is:
>>>>>> - the first render process of the page itself shows the container once
>>>>>> - on clicking my radiochoice the webmarkupcontainer disappears but is
>>>>>> still available, due to outPutMarkUpPlaceHolder true, but the content
>> is
>>>>>> completly removed and the visibility of the container is always
>>>>>> display:none.
>>>>>>
>>>>>> Using setVisible or using setVisibilityAllowed does not make any
>>>> changes.
>>>>>
>>>>> So your container disappears but does not show up again after setting
>> it
>>>>> visible?
>>>>>
>>>>> Sven
>>>>>
>>>>> On 03/28/2013 11:12 AM, Patrick Davids wrote:
>>>>>> Hi together,
>>>>>> I searched the web for several hours and always get the same results
>> for
>>>>>> setting the visibilty for components via ajax, but I cannot get it
>> work.
>>>>>>
>>>>>> The "should work" solution is:
>>>>>> - Creat an extra a WebMarkupContainer in your page
>>>>>> - add your subcomponents to this container
>>>>>> - setOutPutMarkUpIdPlacerHolderTag(true) for the container
>>>>>> - implement ajax anywhere (in my case its an
>>>>>> AjaxFormChoiceComponentUpdatingBehavior)
>>>>>> - override its onUpdate and setVisibilty of the container true or
>> false
>>>>>> depending on something
>>>>>> - do target.add( the webmarkupcontainer )
>>>>>>
>>>>>> Tada... but nothing happens.
>>>>>>
>>>>>> My problems are:
>>>>>> All solutions I found are about 2-5 years old, so:
>>>>>> - the usage of setVisibilty has changed (setVisible vs.
>>>>>> setVisibilityAllowed() discussion)
>>>>>> - target does not have an addComponent() method anymore (but this is
>>>>>> easy, should be add(...))
>>>>>> - perhaps the hole "SetVisibilityViaAjax"-way has changed since newer
>>>>>> wicket versions?
>>>>>>
>>>>>> My behavior on the gui is:
>>>>>> - the first render process of the page itself shows the container once
>>>>>> - on clicking my radiochoice the webmarkupcontainer disappears but is
>>>>>> still available, due to outPutMarkUpPlaceHolder true, but the content
>> is
>>>>>> completly removed and the visibility of the container is always
>>>>>> display:none.
>>>>>>
>>>>>> Using setVisible or using setVisibilityAllowed does not make any
>>>> changes.
>>>>>>
>>>>>> Whats wrong?!? :-(
>>>>>>
>>>>>> (using wicket 6.6)
>>>>>>
>>>>>> kind regards
>>>>>> Patrick
>>>>>> ---------------------------------------------------------------------
>>>>>> 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]
>>>>>
>>>>
>>>> --
>>>> Mit freundlichen Grüßen,
>>>>
>>>> Patrick Davids
>>>>
>>>> NuboIT GmbH & Co. KG
>>>> Kieler Str. 103-107 • 25474 Bönningstedt
>>>>
>>>> Email: [email protected]
>>>>
>>>> Handelsregister: HRA6819 Pi  | Amtsgericht Pinneberg
>>>>
>>>> Geschäftsführung der Verwaltungsgesellschaft
>>>> Daniel Fraga Zander
>>>>
>>>> HRB10145Pi | Amtsgericht Pinneberg
>>>
>>>
>>>
>>>
>>
>> --
>> Mit freundlichen Grüßen,
>>
>> Patrick Davids
>>
>> NuboIT GmbH & Co. KG
>> Kieler Str. 103-107 • 25474 Bönningstedt
>>
>> Email: [email protected]
>>
>> Handelsregister: HRA6819 Pi  | Amtsgericht Pinneberg
>>
>> Geschäftsführung der Verwaltungsgesellschaft
>> Daniel Fraga Zander
>>
>> HRB10145Pi | Amtsgericht Pinneberg
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [email protected]
>> For additional commands, e-mail: [email protected]
>>
>>
>
>

-- 
Mit freundlichen Grüßen,

Patrick Davids

NuboIT GmbH & Co. KG
Kieler Str. 103-107 • 25474 Bönningstedt

Email: [email protected]

Handelsregister: HRA6819 Pi  | Amtsgericht Pinneberg

Geschäftsführung der Verwaltungsgesellschaft
Daniel Fraga Zander

HRB10145Pi | Amtsgericht Pinneberg

Reply via email to