have you noticed that no one else is finding this particularly hard?
class dataconverter implements imodel {
final imodel model;
public dataconverter(imodel model) { this.model=model; }
public void detach() { model.detach(); }
public Object getObject() { return convertToComponent(model.getobject()); }
public void setObject() { model.setObject(convertFromComponent(object); }
protected abstract Object convertToComponent(Object o);
protected abstract Object convertFromComponent(Object o);
}
add(new CheckBox("foo") {
protected imodel initmodel() {
return new dataconverter(super.initmodel()){
protected Object convertToComponent(Object o) {
if (o.tostring().equals("y")) { return true; } else
{return false; }
}
protected Object convertFromComponent(Object o) {
if (((boolean)o)==true) { return "y"; } else { return "n"; }
}
}
}
now it looks just like the converter...all it takes is a little bit of
thinking and a little less complaining.
-igor
On Tue, Mar 25, 2008 at 4:21 PM, <[EMAIL PROTECTED]> wrote:
> Mine is not working. I feel these "basic" data manipulation tasks
> are little to "heavy" in Wicket. Some built-in custom/helper classes
> could help a bit. I found I am writing many of these kind of custom
> class to do basic conversion and still have to worry if I am doing right,
> like the detach() method Igor just pointed out.
>
>
>
> >wondering if that really always works.
> >looking at the current getConverter doc:
> >
> >/**
> > * CheckBox will by default always just use the boolean converter
> >because the implementation
> > * expects that the string is can be converted to a boolean [EMAIL
> PROTECTED]
> >Strings#isTrue(String)}
> > *
> > * @see org.apache.wicket.Component#getConverter(java.lang.Class)
> > */
> > public IConverter getConverter(Class type)
> > {
> > return BooleanConverter.INSTANCE;
> > }
> >
> >but i guess yours works by accident because
> >Strings#isTrue(String) returns the right value for Y or N
> >
> >Also with generics i believe we have this:
> >
> >public class Checkbox extends FormComponent<Boolean>
> >
> >so the model type is hard to a boolean.
> >
> >johan
> >
> >
> >On Tue, Mar 25, 2008 at 11:30 PM, <[EMAIL PROTECTED]> wrote:
> >
> >> I just tested and it worked. Thanks very much.
> >> Pardon me for being stubbon here. For a simple
> >> convertion like this, So much has to be created so it seems a little heavy
> >> weight.
> >> For this one,
> >> first a subclass of Checkbox (possibly creating multiple constructors)
> >> overide initmodel and separate custom model class just to convert
> >> a simple data object to another. I'd still prefer the direct converter
> >> method.
> >> Even though one could see it as in business domain, this kind of
> >> conversion
> >> is generic enough to be put in the convert phase. Also, I saw you saying
> >> about
> >> the detach() method, it could add some performance overhead, I guess.
> >> Could you show me what I am doing wrong below for the converter method?
> >> If this works, I'd even suggest to make it in the wicket core release:-)
> >> by adding a method such as
> >> new CheckBox(id).setTrueFalse("y","n"), you get the idea.
> >>
> >> public class CheckBoxYN extends CheckBox{
> >>
> >> public CheckBoxYN(String id){
> >> super(id);
> >> }
> >>
> >> @Override
> >> public final IConverter getConverter(Class arg0){
> >> IConverter icYN = new IConverter(){
> >>
> >> public Object convertToObject(String arg0, Locale arg1) {
> >> if (arg0.equals("true")){
> >> return 'Y';
> >> }else{
> >> return 'N';
> >> }
> >>
> >> }
> >>
> >> public String convertToString(Object arg0, Locale arg1) {
> >> if(arg0.toString().equals('Y')){
> >> return "true";
> >>
> >> }else{
> >> return "false";
> >> }
> >>
> >> }
> >>
> >> };
> >> return icYN;
> >> }
> >>
> >> }
> >>
> >>
> >>
> >> >what i have shown you will work independently of the fact that you are
> >> >sure or not :)
> >> >
> >> >-igor
> >> >
> >> >
> >> >On Tue, Mar 25, 2008 at 2:51 PM, <[EMAIL PROTECTED]> wrote:
> >> >> I am not sure how this would solve my problem
> >> >> I intend to only use
> >> >> new CheckBox("checked") without adding any other arguments
> >> >> since I expect it to resolve the form's compoundpropertymodel
> >> >> whose object is entitybean with "checked" as column name.
> >> >>
> >> >>
> >> >>
> >> >>
> >> >>
> >> >>
> >> >> >or you can simply do:
> >> >> >
> >> >> >class YesNoCheckBox extends CheckBox {
> >> >> >
> >> >> > protected IModel initModel() {
> >> >> > return new CheckBoxYesNoModel(super.initModel());
> >> >> > }
> >> >> >}
> >> >> >
> >> >> >-igor
> >> >> >
> >> >> >On Tue, Mar 25, 2008 at 2:29 PM, <[EMAIL PROTECTED]> wrote:
> >> >> >> Use model decorator sometimes seems troublesome.
> >> >> >> I need to use a form containing a lot of checkboxes and other
> >> types
> >> >> >> with compoundproperty model with a entity bean, say record.
> >> >> >> Most formcoponent ids are identical to their record property name,
> >> >> >> such as Textfield("firstName") and record also has "firstName"
> >> >> >> if I use the extra decorator indirection for checkbox,
> >> >> >> I'd have to use
> >> >> >> CheckBox("checked",new CustomerModel(new
> >> >PropertyModel(record,"checked"))
> >> >> >> or is there a better/convenient way to do this?
> >> >> >>
> >> >> >>
> >> >> >>
> >> >> >> >you forgot the important detach() { room.detach(); }
> >> >> >> >
> >> >> >>
> >> >> >> >-igor
> >> >> >> >
> >> >> >> >
> >> >> >> >On Tue, Mar 25, 2008 at 1:52 PM, Timo Rantalaiho
> >> ><[EMAIL PROTECTED]>
> >> >> >> >wrote:
> >> >> >> >>
> >> >> >>
> >> >> >>
> >> >> >> >> On Tue, 25 Mar 2008, [EMAIL PROTECTED] wrote:
> >> >> >> >> > Is there built-in mechanism to auto convert the checkbox
> >> model
> >> >value
> >> >> >> >> > to be a character set Y/N or Yes/No or any other pairs?
> >> >> >> >> > This is frequently used pattern.
> >> >> >> >>
> >> >> >> >> Probably you could set your own IConverter on the component
> >> >> >> >> corresponding the checkbox. The converter can then be reused
> >> >> >> >> as needed.
> >> >> >> >>
> >> >> >> >> I've typically (if not always) used checkboxes with custom
> >> models
> >> >> >> >> directly toggling things in domain objects, e.g.
> >> >> >> >>
> >> >> >> >> class RoomReservedModel extends Model {
> >> >> >> >> private IModel room;
> >> >> >> >>
> >> >> >> >> public RoomReservedModel(IModel room) {
> >> >> >> >> this.room = room;
> >> >> >> >> }
> >> >> >> >>
> >> >> >> >> @Override
> >> >> >> >> public void setObject(Object object) {
> >> >> >> >> room().setReserved((Boolean) object);
> >> >> >> >> }
> >> >> >> >>
> >> >> >> >> @Override
> >> >> >> >> public Object getObject() {
> >> >> >> >> return room().isReserved();
> >> >> >> >> }
> >> >> >> >>
> >> >> >> >> private Room room() {
> >> >> >> >> return (Room) room.getObject();
> >> >> >> >> }
> >> >> >> >> }
> >> >> >> >>
> >> >> >> >> Best wishes,
> >> >> >> >> Timo
> >> >> >> >>
> >> >> >> >> --
> >> >> >> >> Timo Rantalaiho
> >> >> >> >> Reaktor Innovations Oy <URL: http://www.ri.fi/ >
> >> >> >> >>
> >> >> >> >>
> >> >---------------------------------------------------------------------
> >> >> >> >> 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]
> >> >> >> >
> >> >> >>
> >> >> >>
> >> ---------------------------------------------------------------------
> >> >> >> 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]
> >> >> >
> >> >>
> >> >> ---------------------------------------------------------------------
> >> >> 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]
> >> >
> >>
> >> ---------------------------------------------------------------------
> >> 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]
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]