Table of Contents
Abstract
This chapter describes the main mechanisms by which the UI provided by Wicket Objects can be customized.
Wicket Objects offers several ways in which the UI rendered can be customized, from simply tweaking the CSS (though this in itself can be pretty powerful) through to supporting mashups and wizards. This chapter explains each of these approaches.
CSS is used heavily in Wicket
Objects, with the HTML of each
Component
using CSS classes
for the styling. But you can override the default styling by supplying
an application-level CSS file which by default should
be called css/application.css
in the classpath (eg
under src/main/resources
). If you want to call the
file something else, the subclass
WicketObjectsApplication
and override the
getApplicationCss()
method.
There are two levels at which we can override the default styling, either generically or specific to a particular domain.
The name of each class indicates the nature of what is being
rendered, and each Component
provides some
default styling so that the out-of-the-box UI is
usable. For example, an entity icon, title and actions are rendered
as:
The icon and title for this are rendered as:
<div class="entitySummary"> <img src="?wicket:interface=:4:entity:entity:entitySummary:entityImage:1:IResourceListener::" class="entityImage" wicket:id="entityImage"> <label class="entityTitle" wicket:id="entityTitle">Fred Smith</label> ... </div>
So, to change the font, you could use:
div.entitySummary > label.entityTitle { color: maroon; font-size: xx-large; font-weight: bolder; }
This would render the entity icon and title as:
In this way you can develop a look-n-feel for the application (or perhaps your organization).
As well as targetting HTML elements generically, individual class members can also be targetted for a particular domain model.
For example, the properties of a Claim
object might be rendered as:
The HTML for the
description
property is:
<div class="Claim-description" wicket:id="scalar"> <wicket:panel> <div class="string scalarPanel"> <label wicket:id="scalarIfRegular" for="scalarValue3d"> <span class="scalarName" wicket:id="scalarName">description</span> <span class="scalarValue"> <input type="text" title="" size="25" disabled="disabled" value="Meeting at clients" wicket:id="scalarValue" id="scalarValue3d" name="properties:1:scalar:scalarIfRegular:scalarValue"> </span> </label> <span wicket:id="feedback"> <wicket:panel> </wicket:panel> </span> </div> </wicket:panel> </div>
To change the label of this specific element, we could use:
.Claim-description .scalarName { color: maroon; font-weight: bolder; }
which would give us:
This is a slightly trite example, but demonstrates the point.