Adding attributes to child components in a behavior.
Is there a way to add attributes to child components in a behavior that is added to a page? I want to create a behavior that is added to a page that adds some js to the header and then adds some js in an onfocus attribute of each child form component on the page. I have the list of child form components, but can't figure out how to add the attribute to the components. Warren
Re: Adding attributes to child components in a behavior.
Warren, See MarkupContainer#visitChildren Regards - Cemal jWeekend OO Java Technologies, Wicket Consulting, Development, Training http://jWeekend.com On 15 April 2010 18:44, Warren Bell warr...@clarksnutrition.com wrote: Is there a way to add attributes to child components in a behavior that is added to a page? I want to create a behavior that is added to a page that adds some js to the header and then adds some js in an onfocus attribute of each child form component on the page. I have the list of child form components, but can't figure out how to add the attribute to the components. Warren - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org
Re: Adding attributes to child components in a behavior.
I have that figured out, I just don't know how to add the attribute to each component. I can't add a behavior, since Cannot modify component hierarchy after render phase has started (page version cant change then anymore) Can I even do this in a behavior? Cemal Bayramoglu wrote: Warren, See MarkupContainer#visitChildren Regards - Cemal jWeekend OO Java Technologies, Wicket Consulting, Development, Training http://jWeekend.com On 15 April 2010 18:44, Warren Bell warr...@clarksnutrition.com wrote: Is there a way to add attributes to child components in a behavior that is added to a page? I want to create a behavior that is added to a page that adds some js to the header and then adds some js in an onfocus attribute of each child form component on the page. I have the list of child form components, but can't figure out how to add the attribute to the components. Warren - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org -- Thanks, Warren Bell - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org
RE: Adding attributes to child components in a behavior.
Sorry if this got double posted, I didn't see it up there. I have that figured out, I just don't know how to add the attribute to each component. I can't add a behavior, since Cannot modify component hierarchy after render phase has started (page version cant change then anymore) Can I even do this in a behavior? Cemal Bayramoglu wrote: Warren, See MarkupContainer#visitChildren Regards - Cemal jWeekend OO Java Technologies, Wicket Consulting, Development, Training http://jWeekend.com On 15 April 2010 18:44, Warren Bell warr...@clarksnutrition.com wrote: Is there a way to add attributes to child components in a behavior that is added to a page? I want to create a behavior that is added to a page that adds some js to the header and then adds some js in an onfocus attribute of each child form component on the page. I have the list of child form components, but can't figure out how to add the attribute to the components. Warren - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org -- Thanks, Warren Bell - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org
Re: Adding attributes to child components in a behavior.
Hi Warren, The way I normally handle this situation is to create a javascript emitting behaviour that is attached to the container. This behaviour will emit the necessary javascript method to do what you need to do. Then for each child component you can use an AttributeModifier to write their onclick callback to call the custom method being emitted by the container attached behavior. All the logic can be handled in the implementation details of the custom method/Object that was emitted. To get the onclick actions emitted before the rendering phase either include it within the container.onBeforeRender() method, to call the visitChildren method, or perhaps within your behavior override the AbstractBehavior.beforeRender(Component c) method. I've written something like this for a table of check boxes where each column header is a radio button. Selecting column 2's radio button causes all of the check boxes in column 1 to become disabled and all the check boxes in column 2 to become enabled. In my case I made the behaviour aware of the components in each column and then during rendering the javascript it writes out an array of markup id's for each table column. But if you don't have the child components in scope when adding the behavior to the container adding the child behaviors before rendering starts should let things work. Regards, Mike I have that figured out, I just don't know how to add the attribute to each component. I can't add a behavior, since Cannot modify component hierarchy after render phase has started (page version cant change then anymore) Can I even do this in a behavior? Cemal Bayramoglu wrote: Warren, See MarkupContainer#visitChildren Regards - Cemal jWeekend OO Java Technologies, Wicket Consulting, Development, Training http://jWeekend.com On 15 April 2010 18:44, Warren Bell warr...@clarksnutrition.com wrote: Is there a way to add attributes to child components in a behavior that is added to a page? I want to create a behavior that is added to a page that adds some js to the header and then adds some js in an onfocus attribute of each child form component on the page. I have the list of child form components, but can't figure out how to add the attribute to the components. Warren - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org
Re: Adding attributes to child components in a behavior.
I assume you were trying this in beforeRender of your behaviour, which as you say is too late. If you really need to use a behaviour encapsulate all this, try something like the following, but some may feel its a little politically incorrect to do this in bind. class MyBehaviour extends AbstractBehavior{ @Override public void bind(Component component) { if(!(component instanceof MarkupContainer)){ throw new RuntimeException(contaıners only please); } visitChildren(new IVisitorComponent(){ @Override public Object component(Component component) { component.add(new SimpleAttributeModifier(class,goodChild)); return IVisitor.CONTINUE_TRAVERSAL; } }); } } Regards - Cemal jWeekend OO Java Technologies, Wicket Consulting, Development, Training http://jWeekend.com On 15 April 2010 20:17, Warren Bell warrenbe...@gmail.com wrote: I have that figured out, I just don't know how to add the attribute to each component. I can't add a behavior, since Cannot modify component hierarchy after render phase has started (page version cant change then anymore) Can I even do this in a behavior? Cemal Bayramoglu wrote: Warren, See MarkupContainer#visitChildren Regards - Cemal jWeekend OO Java Technologies, Wicket Consulting, Development, Training http://jWeekend.com On 15 April 2010 18:44, Warren Bell warr...@clarksnutrition.com wrote: Is there a way to add attributes to child components in a behavior that is added to a page? I want to create a behavior that is added to a page that adds some js to the header and then adds some js in an onfocus attribute of each child form component on the page. I have the list of child form components, but can't figure out how to add the attribute to the components. Warren - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org -- Thanks, Warren Bell - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org
Re: Adding attributes to child components in a behavior.
... and if you're not building your component tree before you add such an IBehaviour to the parent container you can instead override onBeforeRender on that container to do something like: @Override public void onBeforeRender() { super.onBeforeRender(); visitChildren(new IVisitorComponent(){ @Override public Object component(Component component) { component.add(new SimpleAttributeModifier(class,goodChild)); return IVisitor.CONTINUE_TRAVERSAL; } }); } Regards - Cemal jWeekend OO Java Technologies, Wicket Consulting, Development, Training http://jWeekend.com On 15 April 2010 21:17, Cemal Bayramoglu jweekend_for...@cabouge.com wrote: I assume you were trying this in beforeRender of your behaviour, which as you say is too late. If you really need to use a behaviour encapsulate all this, try something like the following, but some may feel its a little politically incorrect to do this in bind. class MyBehaviour extends AbstractBehavior{ �...@override public void bind(Component component) { if(!(component instanceof MarkupContainer)){ throw new RuntimeException(contaıners only please); } visitChildren(new IVisitorComponent(){ �...@override public Object component(Component component) { component.add(new SimpleAttributeModifier(class,goodChild)); return IVisitor.CONTINUE_TRAVERSAL; } }); } } Regards - Cemal jWeekend OO Java Technologies, Wicket Consulting, Development, Training http://jWeekend.com On 15 April 2010 20:17, Warren Bell warrenbe...@gmail.com wrote: I have that figured out, I just don't know how to add the attribute to each component. I can't add a behavior, since Cannot modify component hierarchy after render phase has started (page version cant change then anymore) Can I even do this in a behavior? Cemal Bayramoglu wrote: Warren, See MarkupContainer#visitChildren Regards - Cemal jWeekend OO Java Technologies, Wicket Consulting, Development, Training http://jWeekend.com On 15 April 2010 18:44, Warren Bell warr...@clarksnutrition.com wrote: Is there a way to add attributes to child components in a behavior that is added to a page? I want to create a behavior that is added to a page that adds some js to the header and then adds some js in an onfocus attribute of each child form component on the page. I have the list of child form components, but can't figure out how to add the attribute to the components. Warren - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org -- Thanks, Warren Bell - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org
Re: Adding attributes to child components in a behavior.
I ended up doing it in bind of the behavior and it works fine. I just have to remember to add the behavior to the page after all the other components. Thanks I assume you were trying this in beforeRender of your behaviour, which as you say is too late. If you really need to use a behaviour encapsulate all this, try something like the following, but some may feel its a little politically incorrect to do this in bind. class MyBehaviour extends AbstractBehavior{ @Override public void bind(Component component) { if(!(component instanceof MarkupContainer)){ throw new RuntimeException(contaıners only please); } visitChildren(new IVisitorComponent(){ @Override public Object component(Component component) { component.add(new SimpleAttributeModifier(class,goodChild)); return IVisitor.CONTINUE_TRAVERSAL; } }); } } Regards - Cemal jWeekend OO Java Technologies, Wicket Consulting, Development, Training http://jWeekend.com On 15 April 2010 20:17, Warren Bell warrenbe...@gmail.com wrote: I have that figured out, I just don't know how to add the attribute to each component. I can't add a behavior, since Cannot modify component hierarchy after render phase has started (page version cant change then anymore) Can I even do this in a behavior? Cemal Bayramoglu wrote: Warren, See MarkupContainer#visitChildren Regards - Cemal jWeekend OO Java Technologies, Wicket Consulting, Development, Training http://jWeekend.com On 15 April 2010 18:44, Warren Bell warr...@clarksnutrition.com wrote: Is there a way to add attributes to child components in a behavior that is added to a page? I want to create a behavior that is added to a page that adds some js to the header and then adds some js in an onfocus attribute of each child form component on the page. I have the list of child form components, but can't figure out how to add the attribute to the components. Warren - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org -- Thanks, Warren Bell - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org
Re: Adding attributes to child components in a behavior.
Yes, this is risky. Why not add the appropriate onclick handler via JS on the client side? i.e., you could output javascript (jQuery in this example) that says: $('#myTableID tr').click(function() { // do whatever your onclick should do }); That's just another option - not necessarily the best way either. -- Jeremy Thomerson http://www.wickettraining.com 2010/4/15 Warren Bell warr...@clarksnutrition.com I ended up doing it in bind of the behavior and it works fine. I just have to remember to add the behavior to the page after all the other components. Thanks I assume you were trying this in beforeRender of your behaviour, which as you say is too late. If you really need to use a behaviour encapsulate all this, try something like the following, but some may feel its a little politically incorrect to do this in bind. class MyBehaviour extends AbstractBehavior{ @Override public void bind(Component component) { if(!(component instanceof MarkupContainer)){ throw new RuntimeException(contaıners only please); } visitChildren(new IVisitorComponent(){ @Override public Object component(Component component) { component.add(new SimpleAttributeModifier(class,goodChild)); return IVisitor.CONTINUE_TRAVERSAL; } }); } } Regards - Cemal jWeekend OO Java Technologies, Wicket Consulting, Development, Training http://jWeekend.com On 15 April 2010 20:17, Warren Bell warrenbe...@gmail.com wrote: I have that figured out, I just don't know how to add the attribute to each component. I can't add a behavior, since Cannot modify component hierarchy after render phase has started (page version cant change then anymore) Can I even do this in a behavior? Cemal Bayramoglu wrote: Warren, See MarkupContainer#visitChildren Regards - Cemal jWeekend OO Java Technologies, Wicket Consulting, Development, Training http://jWeekend.com On 15 April 2010 18:44, Warren Bell warr...@clarksnutrition.com wrote: Is there a way to add attributes to child components in a behavior that is added to a page? I want to create a behavior that is added to a page that adds some js to the header and then adds some js in an onfocus attribute of each child form component on the page. I have the list of child form components, but can't figure out how to add the attribute to the components. Warren - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org -- Thanks, Warren Bell - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org