Ack, sorry, I managed to figure it out via Michael's suggestion.
Here's the result. This show the relevant parts of embedding a
userpanel into a templatepage:

TemplatePage.html:

    <div id="userdiv" wicket:id="userdiv">
       <div id="user" wicket:id="user">user</div>
    </div><!-- end user -->

TemplatePage.java:

    WebMarkupContainer c = new WebMarkupContainer("userdiv");
    c.add(new AttributeModifier("class",true,new Model<String>("even")));
    add(c);
    c.add(new UserPanel("user"));       

The resulting markup:

    <div id="userdiv" class="even">
       <div id="user"><!-- begin user ..................... -->
       ...
       </div>
    </div><!-- end user -->

and I'm able to programmatically alter the value of the
'class' attribute on the userdiv (wrapper div) element.
It was a bit more complicated than I'd wished, but not
onerously so, and frankly not much more code than
using the DOM.

Thanks very much guys!

Ichiro


On 10/1/10, Ichiro Furusato <ichiro.furus...@gmail.com> wrote:
> Hmm. Thanks for the answers guys but from what I've understand
> so far from my own digging and your answers is that the container
> <div> I want to modify still needs to be created programmatically,
> and I'm distinctly trying to modify the attribute of one that begins its
> life in markup (i.e., in the .html file, not the .java file).
>
> It seems that may not be possible in Wicket so I'll probably have to
> push the contained markup into a fragment and add it to a
> programmatically-created element. Not quite what I wanted (and
> more complicated than I'd prefer) but doable.
>
> It's a shame something that can be accomplished with a simple
> DOM manipulation (get element by ID, then set its attribute value)
> ends up being fairly complicated.
>
> Thanks!
>
> Ichiro
>
>
> On 10/1/10, Michael O'Cleirigh <michael.ocleir...@rivulet.ca> wrote:
>>   How about using a WebMarkupContainer?
>>
>> Then you can use an attribute modifier like the below example to set the
>> class value.
>>
>> All you have to do is make the new component heirarchy match the markup
>> heirarchy.
>>
>> <div wicket:id="styler" class="foo">
>> <table>
>> <form wicket:id="form>
>> ...
>> </form>
>> </table>
>> </div>
>>
>>
>> In your panel you go from:
>>
>> add (new Form ("form"));
>> ...
>>
>> to:
>>
>>   WebMarkupContainer c = new WebMarkupContainer ("styler");
>> c.add (new AttributeModifier ("class", true, new Model<String>("even")));
>>
>> add (c);
>>
>> c.add (new Form("form"));
>>
>> Another option might be to use a border to add the wrapping <div> and
>> class attribute.
>>
>> Regards,
>>
>> Mike
>>
>>
>>> Hi Ichiro,
>>>
>>> This is what I use in a ListView to change the "style" attribute of
>>> table
>>> rows to give alternate colours to them.
>>>
>>> <code>
>>> item.add(new AttributeModifier("class", true, new
>>> AbstractReadOnlyModel<String>()
>>>                  {
>>>                      @Override
>>>                      public String getObject()
>>>                      {
>>>                          return (item.getIndex() % 2 == 1) ? "even" :
>>> "odd";
>>>                      }
>>>                  }));
>>> </code>
>>>
>>> I think you can add attributes like this to any component.
>>>
>>> On Fri, Oct 1, 2010 at 8:23 AM, James
>>> Carman<ja...@carmanconsulting.com>wrote:
>>>
>>>> AttributeModifier
>>>> On Sep 30, 2010 8:07 PM, "Ichiro Furusato"<ichiro.furus...@gmail.com>
>>>> wrote:
>>>>> Hi,
>>>>>
>>>>> I'm assuming this is a dumb question but I wasn't able to locate an
>>>> answer
>>>>> for what must be an extremely common need. I found the docs on "How to
>>>>> modify an attribute on a HTML tag" but that doesn't quite fit, as the
>>>> examples
>>>>> are all for elements that are themselves created programmatically.
>>>>> Mine
>>>> is
>>>>> solely in markup.
>>>>>
>>>>> I've got a lot of HTML markup surrounded by a<div>  element. The<div>
>>>>> element isn't created via Wicket, it's in my HTML file. It has a fair
>>>>> bit
>>>> of
>>>>> descendent content so I don't want to have to create that via Java, as
>>>>> I'm assuming if I put a wicket:id on the<div>  element that would
>>>>> replace
>>>>> everything within the<div>. I just want to programmatically alter its
>>>> 'class'
>>>>> attribute, but I don't see how this is accomplished.
>>>>>
>>>>> E.g.,
>>>>>
>>>>> <div class="foo">
>>>>> <table>
>>>>> ... etc.
>>>>> </table>
>>>>> </div>
>>>>>
>>>>> This would effectively be some kind of query to locate the<div>
>>>>> element,
>>>>> then a modification of its 'class' attribute.
>>>>>
>>>>> Alternately, if I am required to create the<div>  element
>>>> programmatically,
>>>>> how I attach a whole lot of HTML markup to it? Do I have to use a
>>>> fragment?
>>>>> That seems like a lot of work to just alter an attribute value, so
>>>>> like
>>>>> I
>>>> said,
>>>>> I must be missing something obvious here...
>>>>>
>>>>> Ichiro
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> 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
>>
>>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org

Reply via email to