Re: [Wicket-user] DropDownChoice binding question

2006-12-31 Thread Flavius


ok, I see where you're going with this.
very cool.

My enum is in a helper class and I started writing conversion methods in the
helper class.  But I like the way you wrapped your conversion methods
 in a class to use on the Page class.

I also gave some thought last night to using a MapInteger, String with
the same conversion technique.  Then my dropdown uses Integers and
I can do a map.get() in getDisplayValue() for the String.

Thanks for your help, Igor.


igor.vaynberg wrote:
 
 you are passing a list of enum objects into the list model of the dropdown
 choice, that means the one selected object out of that list - of type enum
 -
 will be set into the model object.
 
 so there are two ways to do this
 
 you can pass in a list of ints into the choice component, that way the
 selected int will be set into your model
 
 or you can write a model decorator that does the transform
 
 class SizeEnumToIntModel extends Model {
private final IModel delegate;
public SizeEnumToIntModel(IModel delegate) {
  this.delegate=delegate; }
 
   public Object getObject(Component c) {return Size.forValue(
 delegate.getObject(c); // convert int to enum }
   public void setObject(Component c, Object o) {
 delegate.setObject(((Size)o).getintvalue();
 // convert enum to int }
   public void detach() {  delegate.detach(); }
 }
 
 then
 
 new DropDownChoice(id, new SizeEnumToIntModel(new PropertyModel(form,
 size))
 
 you lose the nice compound model syntax, but oh well
 
 you might also be able to use a convert to accomplish the same, but i
 havent
 looked into that
 
 
 -igor
 
 


-- 
View this message in context: 
http://www.nabble.com/DropDownChoice-binding-question-tf2900580.html#a8108551
Sent from the Wicket - User mailing list archive at Nabble.com.


-
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT  business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.phpp=sourceforgeCID=DEVDEV
___
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user


[Wicket-user] DropDownChoice binding question

2006-12-30 Thread Flavius

Greetings,

I am trying to take the value (only) of a DropDownChoice
and put it in a model set on the Form.

Ideally, I'd like to use a (java 5) enum, but any type of
name value pair will work.

For example, if I'm trying to set the size of a Shirt class, 
here is my Shirt, and a sample enum:


public class Shirt
{
private int size;
private int color;  
//. . . 
//(setters and getters removed to compact)
}

public static enum SIZE
{
Small(2),
Medium(4),
Large(6),

private String id;

SIZE(String id)
{
this.id = id;
}

public String getId()
{
return id;
}

public String getName()
{
return id +  -  + this.toString();
}
}

Now, in my Form, I set the shirt as a model.  When I add my size
DropDownChoice to the form, I am binding it to the size field of my
Shirt class:


private class InputForm extends Form
{
public InputForm(String name)
{
super(name, new CompoundPropertyModel(new Shirt()));


DropDownChoice sizeChoice = new DropDownChoice(size,
Arrays.asList(SIZE.values()),   

new ChoiceRenderer(name, id));

sizeChoice.setRequired(true);
add(sizeChoice);
//. . .
}

}

When I submit this form, it fails because I get a Small, Medium, or
Large
object back.  What I want is the id of the selected object.
I looked at the examples in DropDownChoicePage.java in the compref package
of the
wicket examples and I could do that: create a list of Integers and use a
switch
or other technique to get the display value.

What I really want to do is bind the id property of the enum to the
Shirt.size property.
I've done this in reverse with a PropertyModel, binding a property of the
model to a field
on the page.  I having some trouble doing it this way.

I read through a number of the posts on DropDownChoice as a search item. 
None seem to hit the
nail on the head.  One poster mentioned using ChoiceRenderer, but I'm not
following how
that would work.

Any suggestions would be greatly appreciated!
I'm using Wicket 1.2.3 and java 5 in Tomcat.

-- 
View this message in context: 
http://www.nabble.com/DropDownChoice-binding-question-tf2900580.html#a8103832
Sent from the Wicket - User mailing list archive at Nabble.com.


-
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT  business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.phpp=sourceforgeCID=DEVDEV
___
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user


Re: [Wicket-user] DropDownChoice binding question

2006-12-30 Thread Nick Heudecker

IChoiceRenderer allows you to specify the id and display values for a
DropDownChoice.  It's exactly what you're looking for.  To explain a bit:

getDisplayValue(...) - returns the value you want the user to see.  Small,
Medium, etc.  This is where you'd return SIZE.getName().
getIdValue(...) returns the value submitted to the application.  This is
where you'd return SIZE.getId().




On 12/30/06, Flavius [EMAIL PROTECTED] wrote:



Greetings,

I am trying to take the value (only) of a DropDownChoice
and put it in a model set on the Form.

Ideally, I'd like to use a (java 5) enum, but any type of
name value pair will work.

For example, if I'm trying to set the size of a Shirt class,
here is my Shirt, and a sample enum:


public class Shirt
{
private int size;
private int color;
//. . .
//(setters and getters removed to compact)
}

public static enum SIZE
{
Small(2),
Medium(4),
Large(6),

private String id;

SIZE(String id)
{
this.id = id;
}

public String getId()
{
return id;
}

public String getName()
{
return id +  -  + this.toString();
}
}

Now, in my Form, I set the shirt as a model.  When I add my size
DropDownChoice to the form, I am binding it to the size field of my
Shirt class:


private class InputForm extends Form
{
public InputForm(String name)
{
super(name, new CompoundPropertyModel(new
Shirt()));


DropDownChoice sizeChoice = new
DropDownChoice(size,
Arrays.asList(SIZE.values()),
new ChoiceRenderer(name, id));

sizeChoice.setRequired(true);
add(sizeChoice);
//. . .
}

}

When I submit this form, it fails because I get a Small, Medium, or
Large
object back.  What I want is the id of the selected object.
I looked at the examples in DropDownChoicePage.java in the compref package
of the
wicket examples and I could do that: create a list of Integers and use a
switch
or other technique to get the display value.

What I really want to do is bind the id property of the enum to the
Shirt.size property.
I've done this in reverse with a PropertyModel, binding a property of the
model to a field
on the page.  I having some trouble doing it this way.

I read through a number of the posts on DropDownChoice as a search item.
None seem to hit the
nail on the head.  One poster mentioned using ChoiceRenderer, but I'm not
following how
that would work.

Any suggestions would be greatly appreciated!
I'm using Wicket 1.2.3 and java 5 in Tomcat.

--
View this message in context:
http://www.nabble.com/DropDownChoice-binding-question-tf2900580.html#a8103832
Sent from the Wicket - User mailing list archive at Nabble.com.


-
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share
your
opinions on IT  business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.phpp=sourceforgeCID=DEVDEV
___
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user

-
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT  business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.phpp=sourceforgeCID=DEVDEV___
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user


Re: [Wicket-user] DropDownChoice binding question

2006-12-30 Thread Flavius


I tried this:

DropDownChoice severityChoice = new 
DropDownChoice(size,  
Arrays.asList(SIZE.values()), 
new ChoiceRenderer()
{
public Object getDisplayValue(Object object)
{
return ((SIZE)object).getName();
}

public String getIdValue(Object object, int 
index)
{
return ((SIZE)object).getId();
}   
});

The page renders fine.  But when I submit the form, I get this error:

WicketMessage: unable to set object Small, model:
Model:classname=[wicket.model.CompoundPropertyModel]

Root cause:

wicket.util.convert.ConversionException: Cannot parse 'Small' using format
[EMAIL PROTECTED]
at
wicket.util.convert.converters.AbstractConverter.newConversionException(AbstractConverter.java:72)

As I understand it, it's trying to set an int in the Shirt model for size,
but the drop down returned the Small object.  What I really need is
Small.getId().  So I need to tell the form to bind the id property of the
return object to the field size




Nick Heudecker wrote:
 
 IChoiceRenderer allows you to specify the id and display values for a
 DropDownChoice.  It's exactly what you're looking for.  To explain a bit:
 
 getDisplayValue(...) - returns the value you want the user to see. 
 Small,
 Medium, etc.  This is where you'd return SIZE.getName().
 getIdValue(...) returns the value submitted to the application.  This is
 where you'd return SIZE.getId().
 
 

-- 
View this message in context: 
http://www.nabble.com/DropDownChoice-binding-question-tf2900580.html#a8104039
Sent from the Wicket - User mailing list archive at Nabble.com.


-
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT  business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.phpp=sourceforgeCID=DEVDEV
___
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user


Re: [Wicket-user] DropDownChoice binding question

2006-12-30 Thread Nick Heudecker

Can I see a bit more of your code?  What you've posted looks good, so it's
possible something else is causing the problem.

You could try ##wicket on Freenode for more help.

On 12/30/06, Flavius [EMAIL PROTECTED] wrote:




I tried this:

DropDownChoice severityChoice = new
DropDownChoice(size,
Arrays.asList(SIZE.values()),
new ChoiceRenderer()
{
public Object getDisplayValue(Object
object)
{
return ((SIZE)object).getName();
}

public String getIdValue(Object object,
int index)
{
return ((SIZE)object).getId();
}
});

The page renders fine.  But when I submit the form, I get this error:

WicketMessage: unable to set object Small, model:
Model:classname=[wicket.model.CompoundPropertyModel]

Root cause:

wicket.util.convert.ConversionException: Cannot parse 'Small' using format
[EMAIL PROTECTED]
at
wicket.util.convert.converters.AbstractConverter.newConversionException(
AbstractConverter.java:72)

As I understand it, it's trying to set an int in the Shirt model for size,
but the drop down returned the Small object.  What I really need is
Small.getId().  So I need to tell the form to bind the id property of the
return object to the field size




Nick Heudecker wrote:

 IChoiceRenderer allows you to specify the id and display values for a
 DropDownChoice.  It's exactly what you're looking for.  To explain a
bit:

 getDisplayValue(...) - returns the value you want the user to see.
 Small,
 Medium, etc.  This is where you'd return SIZE.getName().
 getIdValue(...) returns the value submitted to the application.  This is
 where you'd return SIZE.getId().



--
View this message in context:
http://www.nabble.com/DropDownChoice-binding-question-tf2900580.html#a8104039
Sent from the Wicket - User mailing list archive at Nabble.com.


-
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share
your
opinions on IT  business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.phpp=sourceforgeCID=DEVDEV
___
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user

-
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT  business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.phpp=sourceforgeCID=DEVDEV___
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user


Re: [Wicket-user] DropDownChoice binding question

2006-12-30 Thread Igor Vaynberg

you are passing a list of enum objects into the list model of the dropdown
choice, that means the one selected object out of that list - of type enum -
will be set into the model object.

so there are two ways to do this

you can pass in a list of ints into the choice component, that way the
selected int will be set into your model

or you can write a model decorator that does the transform

class SizeEnumToIntModel extends Model {
  private final IModel delegate;
  public SizeEnumToIntModel(IModel delegate) {
this.delegate=delegate; }

 public Object getObject(Component c) {return Size.forValue(
delegate.getObject(c); // convert int to enum }
 public void setObject(Component c, Object o) {
delegate.setObject(((Size)o).getintvalue();
// convert enum to int }
 public void detach() {  delegate.detach(); }
}

then

new DropDownChoice(id, new SizeEnumToIntModel(new PropertyModel(form,
size))

you lose the nice compound model syntax, but oh well

you might also be able to use a convert to accomplish the same, but i havent
looked into that


-igor

On 12/30/06, Flavius [EMAIL PROTECTED] wrote:




I tried this:

DropDownChoice severityChoice = new
DropDownChoice(size,
Arrays.asList(SIZE.values()),
new ChoiceRenderer()
{
public Object getDisplayValue(Object
object)
{
return ((SIZE)object).getName();
}

public String getIdValue(Object object,
int index)
{
return ((SIZE)object).getId();
}
});

The page renders fine.  But when I submit the form, I get this error:

WicketMessage: unable to set object Small, model:
Model:classname=[wicket.model.CompoundPropertyModel]

Root cause:

wicket.util.convert.ConversionException: Cannot parse 'Small' using format
[EMAIL PROTECTED]
at
wicket.util.convert.converters.AbstractConverter.newConversionException(
AbstractConverter.java:72)

As I understand it, it's trying to set an int in the Shirt model for size,
but the drop down returned the Small object.  What I really need is
Small.getId().  So I need to tell the form to bind the id property of the
return object to the field size




Nick Heudecker wrote:

 IChoiceRenderer allows you to specify the id and display values for a
 DropDownChoice.  It's exactly what you're looking for.  To explain a
bit:

 getDisplayValue(...) - returns the value you want the user to see.
 Small,
 Medium, etc.  This is where you'd return SIZE.getName().
 getIdValue(...) returns the value submitted to the application.  This is
 where you'd return SIZE.getId().



--
View this message in context:
http://www.nabble.com/DropDownChoice-binding-question-tf2900580.html#a8104039
Sent from the Wicket - User mailing list archive at Nabble.com.


-
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share
your
opinions on IT  business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.phpp=sourceforgeCID=DEVDEV
___
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user

-
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT  business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.phpp=sourceforgeCID=DEVDEV___
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user


Re: [Wicket-user] DropDownChoice binding question

2006-12-30 Thread Jonathan Locke


not sure what's wrong with your code, but i've done enum selection in
voicetribe with code that looks like the following:

add(new DropDownChoice(genre, new Model()
{
@Override
public Object getObject(Component component)
{
return Genre.valuesSortedByLocalizedName();
}
}, new IChoiceRenderer()
{
public Object getDisplayValue(Object object)
{
return ((Genre)object).getLocalizedName();
}

public String getIdValue(Object object, int index)
{
return object.toString();
}
}));


Flavius wrote:
 
 
 I tried this:
 
   DropDownChoice severityChoice = new 
 DropDownChoice(size,  
   Arrays.asList(SIZE.values()), 
   new ChoiceRenderer()
   {
   public Object getDisplayValue(Object object)
   {
   return ((SIZE)object).getName();
   }
   
   public String getIdValue(Object object, int 
 index)
   {
   return ((SIZE)object).getId();
   }   
   });
 
 The page renders fine.  But when I submit the form, I get this error:
 
 WicketMessage: unable to set object Small, model:
 Model:classname=[wicket.model.CompoundPropertyModel]
 
 Root cause:
 
 wicket.util.convert.ConversionException: Cannot parse 'Small' using format
 [EMAIL PROTECTED]
 at
 wicket.util.convert.converters.AbstractConverter.newConversionException(AbstractConverter.java:72)
 
 As I understand it, it's trying to set an int in the Shirt model for size,
 but the drop down returned the Small object.  What I really need is
 Small.getId().  So I need to tell the form to bind the id property of the
 return object to the field size
 
 
 
 
 Nick Heudecker wrote:
 
 IChoiceRenderer allows you to specify the id and display values for a
 DropDownChoice.  It's exactly what you're looking for.  To explain a bit:
 
 getDisplayValue(...) - returns the value you want the user to see. 
 Small,
 Medium, etc.  This is where you'd return SIZE.getName().
 getIdValue(...) returns the value submitted to the application.  This is
 where you'd return SIZE.getId().
 
 
 
 

-- 
View this message in context: 
http://www.nabble.com/DropDownChoice-binding-question-tf2900580.html#a8104968
Sent from the Wicket - User mailing list archive at Nabble.com.


-
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT  business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.phpp=sourceforgeCID=DEVDEV
___
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user