I'm running into an issue with Wicket generating markup for elements that programmatically need to be there, but not structurally. It's not messing anything up, but I like to keep the page as tidy as possible. It should be noted that I'm a front-end developer, so I'd like to keep my hands out of the java files, if possible.
开发者_StackOverflow社区Say I have the following HTML that's part of a component's template:
<ul class="configList" wicket:id="rows">
<li wicket:id="cols">
<div wicket:id="checkBoxThing"></div>
</li>
</ul>
And this is the template for checkBoxThing:
<wicket:panel>
<div wicket:id="checkboxContainer">
<label wicket:id="label"></label>
<input type="checkbox" wicket:id="checkbox" name="check" />
</div>
</wicket:panel>
When the page is viewed, the resulting markup looks like this:
<ul class="configList>
<li>
<div>
<div id="RandomWicketID">
<label>Checkbox Label</label>
<input type="checkbox" />
</div>
</div>
</li>
</ul>
Those two DIVs inside the LI aren't doing anything structurally or being used for a client-side script; they're just taking up space. Is there something I can do in the template to tell Wicket not to render them? I can't seem to find any parameters I can pass to accomplish this, and no one around the office seems to know.
Thanks in advance!
Use the <wicket:container> tag.
Note: if Wicket's configuration mode is set to development (the default IIRC) the wicket attributes & tags will still be present in the markup. If you change it to deployment, Wicket will strip them from the output (see https://cwiki.apache.org/WICKET/how-to-remove-wicket-markup-from-output.html).
configList:
<ul class="configList" wicket:id="rows">
<li wicket:id="cols">
<wicket:container wicket:id="checkBoxThing" />
</li>
</ul>
checkBoxThing:
<wicket:panel>
<wicket:container wicket:id="checkboxContainer">
<label>Checkbox Label</label>
<input type="checkbox" />
</wicket:container>
</wicket:panel>
Result (in deployment mode):
<ul class="configList>
<li>
<label>Checkbox Label</label>
<input id="foo" type="checkbox" />
</li>
</ul>
Use a <wicket:container>
eg.
<ul class="configList" wicket:id="rows">
<li wicket:id="cols">
<wicket:container wicket:id="checkBoxThing"></wicket:container>
</li>
</ul>
In general, see https://cwiki.apache.org/WICKET/wickets-xhtml-tags.html
Yet another option is Component#setRenderBodyOnly(true).
精彩评论