Class RatingPanel
java.lang.Object
org.apache.wicket.Component
org.apache.wicket.MarkupContainer
org.apache.wicket.markup.html.WebMarkupContainer
org.apache.wicket.markup.html.panel.Panel
org.apache.wicket.extensions.rating.RatingPanel
- All Implemented Interfaces:
Serializable
,Iterable<Component>
,IEventSink
,IEventSource
,IFeedbackContributor
,IConverterLocator
,IMetadataContext<Serializable,
,Component> IQueueRegion
,IHeaderContributor
,IRequestableComponent
,IHierarchical<Component>
,IClusterable
Rating component that generates a number of stars where a user can click on to rate something.
Subclasses should implement
onRated(int, Optional)
to provide the calculation
of the rating, and onIsStarActive(int)
to indicate whether to render an active star or
an inactive star.
Active stars are the stars that show the rating, inactive stars are the left overs. E.G. a rating
of 3.4 on a scale of 5 stars will render 3 active stars, and 2 inactive stars (provided that the
onIsStarActive(int)
returns true
for each of the first three stars).
Use this component in the following way:
add(new RatingPanel("rating", new PropertyModel(rating, "rating"), 5) { protected boolean onIsStarActive(int star) { return rating.isActive(star); } protected void onRated(int rating, AjaxRequestTarget target) { rating1.addRating(rating); } });The user of this component is responsible for creating a model that supplies a Double (or Float) value for the rating message, however the rating panel doesn't necessarily have to contain a float or number rating value.
Though not obligatory, you could also supply a value for the number of votes cast, which allows the component to render a more complete message in the rating label.
Customizing the rating value and label
To customize the rating value, one should override thenewRatingLabel(String, IModel, IModel)
method and create another label instead, based on
the provided models. If you do so, and use another system of rating than returning a Float or
Double, then you should also customize the rating resource bundle to reflect your message. The
default resource bundle assumes a numeric value for the rating.
Resource bundle
This component uses two types of messages: rating.simple and rating.complete. The first message is used when no model is given for the number of cast votes. The complete message shows the text 'Rating xx.yy from zz votes'.rating.simple=Rated {0,number,#.#} rating.complete=Rated {0,number,#.#} from {1,number,#} votes
Customizing the star images
To customize the images shown, override thegetActiveStarUrl(int)
and
getInactiveStarUrl(int)
methods. Using the iteration parameter it is possible to use a
different image for each star, creating a fade effect or something similar.- Author:
- Martijn Dashorst
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final ResourceReference
Star image for no selected starstatic final ResourceReference
Star image for selected starFields inherited from class org.apache.wicket.Component
ENABLE, FLAG_INITIALIZED, FLAG_RESERVED1, FLAG_RESERVED2, FLAG_RESERVED3, FLAG_RESERVED4, FLAG_RESERVED5, FLAG_RESERVED8, PARENT_PATH, PATH_SEPARATOR, RENDER, RFLAG_CONTAINER_DEQUEING, RFLAG_CONTAINER_HAS_REMOVALS
-
Constructor Summary
ConstructorsConstructorDescriptionRatingPanel
(String id) Constructs a rating component with 5 stars, using a compound property model as its model to retrieve the rating.RatingPanel
(String id, int nrOfStars) Constructs a rating component with nrOfStars stars, using a compound property model as its model to retrieve the rating.RatingPanel
(String id, IModel<? extends Number> rating) Constructs a rating component with 5 stars, using the rating for retrieving the rating.RatingPanel
(String id, IModel<? extends Number> rating, int nrOfStars, boolean addDefaultCssStyle) Constructs a rating component with nrOfStars stars, using the rating for retrieving the rating.RatingPanel
(String id, IModel<? extends Number> rating, int nrOfStars, IModel<Integer> nrOfVotes, boolean addDefaultCssStyle) Constructs a rating panel with nrOfStars stars, where the rating model is used to retrieve the rating, the nrOfVotes model to retrieve the number of casted votes.RatingPanel
(String id, IModel<? extends Number> rating, IModel<Integer> nrOfStars, IModel<Integer> nrOfVotes, IModel<Boolean> hasVoted, boolean addDefaultCssStyle) Constructs a rating panel with nrOfStars stars, where the rating model is used to retrieve the rating, the nrOfVotes model used to retrieve the number of votes cast and the hasVoted model to retrieve whether the user already had cast a vote. -
Method Summary
Modifier and TypeMethodDescriptionprotected String
getActiveStarUrl
(int iteration) Returns the url pointing to the image of active stars, is used to set the URL for the image of an active star.protected String
getInactiveStarUrl
(int iteration) Returns the url pointing to the image of inactive stars, is used to set the URL for the image of an inactive star.protected Component
Creates a new rating label, showing a message like 'Rated 5.4 from 53 votes'.protected Component
newRatingStarBar
(String id, IModel<Integer> nrOfStars) Creates a new bar filled with stars to click on.protected abstract boolean
onIsStarActive
(int star) Returnstrue
when the star identified by its sequence number should be shown as active.protected abstract void
onRated
(int rating, Optional<AjaxRequestTarget> target) Notification of a click on a rating star.void
renderHead
(IHeaderResponse response) Render to the web response whatever the component wants to contribute to the head section.setRatingLabelVisible
(boolean visible) Sets the visibility of the rating label.Methods inherited from class org.apache.wicket.markup.html.panel.Panel
getRegionMarkup, newMarkupSourcingStrategy
Methods inherited from class org.apache.wicket.markup.html.WebMarkupContainer
getWebApplication, getWebPage, getWebRequest, getWebResponse, getWebSession
Methods inherited from class org.apache.wicket.MarkupContainer
add, addDequeuedComponent, addOrReplace, autoAdd, canDequeueTag, contains, dequeue, dequeue, dequeuePreamble, findChildComponent, findComponentToDequeue, get, getAssociatedMarkup, getAssociatedMarkupStream, getMarkup, getMarkupType, internalAdd, internalInitialize, iterator, iterator, newDequeueContext, onComponentTagBody, onDetach, onInitialize, onRender, queue, remove, remove, removeAll, renderAll, renderAssociatedMarkup, renderNext, replace, setDefaultModel, size, stream, streamChildren, toString, toString, visitChildren, visitChildren
Methods inherited from class org.apache.wicket.Component
add, addStateChange, beforeRender, canCallListener, canCallListenerAfterExpiry, checkComponentTag, checkComponentTagAttribute, checkHierarchyChange, clearOriginalDestination, configure, continueToOriginalDestination, createConverter, debug, detach, detachModel, detachModels, determineVisibility, error, exceptionMessage, fatal, findMarkupStream, findPage, findParent, findParentWithAssociatedMarkup, getAjaxRegionMarkupId, getApplication, getBehaviorById, getBehaviorId, getBehaviors, getBehaviors, getClassRelativePath, getConverter, getDefaultModel, getDefaultModelObject, getDefaultModelObjectAsString, getDefaultModelObjectAsString, getEscapeModelStrings, getFeedbackMessages, getFlag, getId, getInnermostModel, getInnermostModel, getLocale, getLocalizer, getMarkup, getMarkupAttributes, getMarkupId, getMarkupId, getMarkupIdFromMarkup, getMarkupIdImpl, getMarkupSourcingStrategy, getMarkupTag, getMetaData, getModelComparator, getOutputMarkupId, getOutputMarkupPlaceholderTag, getPage, getPageRelativePath, getParent, getPath, getRenderBodyOnly, getRequest, getRequestCycle, getRequestFlag, getResponse, getSession, getSizeInBytes, getStatelessHint, getString, getString, getString, getStyle, getVariation, hasBeenRendered, hasErrorMessage, hasFeedbackMessage, info, initModel, internalOnModelChanged, internalRenderComponent, internalRenderHead, isActionAuthorized, isAuto, isBehaviorAccepted, isEnableAllowed, isEnabled, isEnabledInHierarchy, isIgnoreAttributeModifier, isInitialized, isRenderAllowed, isRendering, isStateless, isVersioned, isVisibilityAllowed, isVisible, isVisibleInHierarchy, markRendering, modelChanged, modelChanging, onAfterRender, onBeforeRender, onComponentTag, onConfigure, onEvent, onModelChanged, onModelChanging, onReAdd, onRemove, redirectToInterceptPage, remove, remove, render, renderComponentTag, rendered, renderPart, renderPlaceholderTag, replaceComponentTagBody, replaceWith, sameInnermostModel, sameInnermostModel, send, setAuto, setDefaultModelObject, setEnabled, setEscapeModelStrings, setFlag, setIgnoreAttributeModifier, setMarkup, setMarkupId, setMarkupIdImpl, setMetaData, setOutputMarkupId, setOutputMarkupPlaceholderTag, setParent, setRenderBodyOnly, setResponsePage, setResponsePage, setResponsePage, setVersioned, setVisibilityAllowed, setVisible, success, urlFor, urlFor, urlFor, urlForListener, urlForListener, visitParents, visitParents, warn, wrap
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.apache.wicket.IQueueRegion
dequeue, newDequeueContext
Methods inherited from interface java.lang.Iterable
forEach, spliterator
-
Field Details
-
STAR0
Star image for no selected star -
STAR1
Star image for selected star
-
-
Constructor Details
-
RatingPanel
Constructs a rating component with 5 stars, using a compound property model as its model to retrieve the rating.- Parameters:
id
- the component id.
-
RatingPanel
Constructs a rating component with 5 stars, using the rating for retrieving the rating.- Parameters:
id
- the component idrating
- the model to get the rating
-
RatingPanel
Constructs a rating component with nrOfStars stars, using a compound property model as its model to retrieve the rating.- Parameters:
id
- the component idnrOfStars
- the number of stars to display
-
RatingPanel
public RatingPanel(String id, IModel<? extends Number> rating, int nrOfStars, boolean addDefaultCssStyle) Constructs a rating component with nrOfStars stars, using the rating for retrieving the rating.- Parameters:
id
- the component idrating
- the model to get the ratingnrOfStars
- the number of stars to displayaddDefaultCssStyle
- should this component render its own default CSS style?
-
RatingPanel
public RatingPanel(String id, IModel<? extends Number> rating, int nrOfStars, IModel<Integer> nrOfVotes, boolean addDefaultCssStyle) Constructs a rating panel with nrOfStars stars, where the rating model is used to retrieve the rating, the nrOfVotes model to retrieve the number of casted votes. This panel doens't keep track of whether the user has already voted.- Parameters:
id
- the component idrating
- the model to get the ratingnrOfStars
- the number of stars to displaynrOfVotes
- the number of cast votesaddDefaultCssStyle
- should this component render its own default CSS style?
-
RatingPanel
public RatingPanel(String id, IModel<? extends Number> rating, IModel<Integer> nrOfStars, IModel<Integer> nrOfVotes, IModel<Boolean> hasVoted, boolean addDefaultCssStyle) Constructs a rating panel with nrOfStars stars, where the rating model is used to retrieve the rating, the nrOfVotes model used to retrieve the number of votes cast and the hasVoted model to retrieve whether the user already had cast a vote.- Parameters:
id
- the component id.rating
- the (calculated) rating, i.e. 3.4nrOfStars
- the number of stars to displaynrOfVotes
- the number of cast voteshasVoted
- has the user already voted?addDefaultCssStyle
- should this component render its own default CSS style?
-
-
Method Details
-
renderHead
Description copied from class:Component
Render to the web response whatever the component wants to contribute to the head section.- Specified by:
renderHead
in interfaceIHeaderContributor
- Overrides:
renderHead
in classComponent
- Parameters:
response
- Response object
-
newRatingStarBar
Creates a new bar filled with stars to click on.- Parameters:
id
- the bar idnrOfStars
- the number of stars to generate- Returns:
- the bar with rating stars
-
newRatingLabel
protected Component newRatingLabel(String id, IModel<? extends Number> rating, IModel<Integer> nrOfVotes) Creates a new rating label, showing a message like 'Rated 5.4 from 53 votes'.- Parameters:
id
- the id of the labelrating
- the model containing the ratingnrOfVotes
- the model containing the number of votes (may be null)- Returns:
- the label component showing the message.
-
getActiveStarUrl
Returns the url pointing to the image of active stars, is used to set the URL for the image of an active star. Override this method to provide your own images.- Parameters:
iteration
- the sequence number of the star- Returns:
- the url pointing to the image for active stars.
-
getInactiveStarUrl
Returns the url pointing to the image of inactive stars, is used to set the URL for the image of an inactive star. Override this method to provide your own images.- Parameters:
iteration
- the sequence number of the star- Returns:
- the url pointing to the image for inactive stars.
-
setRatingLabelVisible
Sets the visibility of the rating label.- Parameters:
visible
- true when the label should be visible- Returns:
- this for chaining.
-
onIsStarActive
Returnstrue
when the star identified by its sequence number should be shown as active.- Parameters:
star
- the sequence number of the star (ranging from 0 to nrOfStars)- Returns:
true
when the star should be rendered as active
-
onRated
Notification of a click on a rating star. Add your own components to the request target when you want to have them updated in the Ajax request. NB the target may be null when the click isn't handled using AJAX, but using a fallback scenario.- Parameters:
rating
- the number of the star that is clicked, ranging from 1 to nrOfStarstarget
-
-