In fact, the example createLabel is not really the most interesting. Let's me
explaining what I consider as a good candidate and what I have done
1) A HTML page contains a table which is populated dynamically using a
service collecting data from a DB. the last column of the table is a link
(wicket id="linkRequest") that we would like to show or not depending if we
have receive from the DB, the id (= primary key of the table DB)
corresponding to the record Request to be opened in the screen page
"Request.html / RequestPage)
2) The populateItem method of the DataView allows me for each record to link
the model (= item) returned by the IDataprovider to the columns of my table.
To create the link to the HTML page, I use the Link class that I have
modified like this :
public class LinkRequest<T> extends Link<T> {
private static final long serialVersionUID = 3283912033862898645L;
private RequestFormModel requestFormModel;
public LinkRequest(String id) {
super(id);
}
@Override
public void onClick() {
setResponsePage(new RequestPage(requestFormModel));
}
public RequestFormModel getRequestFormModel() {
return requestFormModel;
}
public void setRequestFormModel(RequestFormModel requestFormModel) {
this.requestFormModel = requestFormModel;
}
}
As you see the onClick() method is defined so I don't need to modify it when
I add the link to my item. To create the link, I call a createLinkRequest
Method who play the role of a factory for me
public static LinkRequest createLinkRequest(String id) {
LinkRequest linkReq = new LinkRequest("linkRequest");
if ( id != null ) {
// Link is enable with parameters required to open
RequestPage
RequestFormModel requestFormModel = new
RequestFormModel();
requestFormModel.setId( Integer.parseInt( id ) );
linkReq.setRequestFormModel(requestFormModel);
linkReq.add(getLinkRequestTxt( id ));
} else {
// Link is disable
linkReq.add(getLinkRequestTxt(""));
linkReq.setEnabled(false);
}
return linkReq;
}
and I call this method from my polulateItem like this
item.add( createLinkRequest( id which is equal to null or to a value ) );
Depending if the value is null or not, the link will be enable or disabled
and the model required by my page request created accordingly.
Is it a correct implementation or a stupid one ? In a previous reply,
someone argues that we must override the method isEnabled() instead of using
setEnable() ?
Regards,
Charles
josephpachod wrote:
>
> hi Charles
>
> The whole issue is that you don't know how the data (in this case a
> String) is to be retrieved. Can it be read only once ? Should it be
> refresh on each request cycle ? On each access to the data ? Does it come
> from a database ?
>
> Wicket's model allows you to go away from all these considerations : you
> just want to be able to get the string. Just let the users of your wicket
> component decide how they want to provide the data.
>
> As such, your example is, I think, broken :
>> private Label labelTitle;
>> public static Label createLabelTitle(String title) {
>> return new Label(title,new PropertyModel( ModelClass, title ));
>> }
>
> What if someone wants to change this string ? title = "my new title" won't
> work there !
>
> Thus, it should be, IMO :
>> public static Label createLabelTitle(final IModel<String> titleModel) {
>> return new Label(title,titleModel.get());
>> }
>
> ++
>
> NB : you might be interested by this article
> http://blog.jteam.nl/2009/09/16/wicket-dos-and-donts/
>
>>
>> Joseph,
>>
>> Can you explain a little bit what you mean by provide it with attribute
>> (IModel<String>) ?
>>
>> private Label labelTitle;
>> public static Label createLabelTitle(String title) {
>> return new Label("title",new Model( title ));
>> }
>>
>> --> becomes
>>
>> private Label labelTitle;
>> public static Label createLabelTitle(String title) {
>> return new Label(title,new PropertyModel( ModelClass, title ));
>> }
>>
>> Is it right what I create ?
>>
>>
>> Joseph Pachod wrote:
>>>
>>> cmoulliard wrote:
>>>> What I have done to avoid to repeat the creation of the labels is to
>>>> define
>>>> and use static method
>>>>
>>>> private Label labelTitle;
>>>> public static Label getLabelTitle(String title) {
>>>> return new Label("title",new Model( title ));
>>>> }
>>>>
>>> I personally would name this method createLabelTitle(String title) or
>>> getNewLabelTitle(String title), for explicitness.
>>>
>>> Furthermore, I would directly provide it with a "final IModel<String>
>>> title" attribute, not to dictate how the data has to be provided
>>> (dynamic or not for example).
>>>
>>> In the end, this method is fine for just a label, but for anything more
>>> complex a panel would be the way to go I would say. The main exception
>>> here I see right now is the case of pages.
>>>
>>> For example, if we're speaking of a page title, then I would define it
>>> in my base page and make an abstract String getTitle() method in the
>>> base page so I'm sure everyone set it up later on. I would do the same
>>> if it's a specific kind of structured page, for example an abstract
>>> class ContentHoldingPage extend TheBasePage.
>>>
>>> ++
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: [email protected]
>>> For additional commands, e-mail: [email protected]
>>>
>>>
>>>
>>
>>
>> -----
>> Charles Moulliard
>> SOA Architect
>>
>> My Blog : http://cmoulliard.blogspot.com/
>> http://cmoulliard.blogspot.com/
>> --
>> View this message in context:
>> http://www.nabble.com/Is-it-the-best-way-to-code-a-Link-depending-on-a-condition-tp25488603p25530206.html
>> Sent from the Wicket - User mailing list archive at Nabble.com.
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [email protected]
>> For additional commands, e-mail: [email protected]
>>
>>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>
>
-----
Charles Moulliard
SOA Architect
My Blog : http://cmoulliard.blogspot.com/ http://cmoulliard.blogspot.com/
--
View this message in context:
http://www.nabble.com/Is-it-the-best-way-to-code-a-Link-depending-on-a-condition-tp25488603p25609212.html
Sent from the Wicket - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]