This has to qualify as one of the most common questions on the list!
Hopefully, generics in 1.4 will make it more clear.

The items in your list have to be the same type as the value model (the
PropertyModel in your case). In your case, Wicket is complaining because
the PropertyModel returns a long, but the list contains Authors.

The cleanest solution is to change your property type to Author. If you
can't, you can either give the DDC a list of author IDs instead of
Authors (in which case you need to implement
ChoiceRenderer.getDisplayValue to look up the author's name given an ID)
or implement a custom model instead of the property model:

IModel authorModel = IModel() {
  public Object getObject() {
    return lookUpAuthor(article.getArticleAuthorId());
  }
  public void setObject(Object object) {
    article.setArticleAuthorId(((Author) object).getId());
  }
}

HTH

jk
    

On Thu, Apr 17, 2008 at 04:05:45PM -0500, Andrew Broderick wrote:
> Hi,
> 
> I have a DropDownChoice in a form, with markup:
> 
> <select wicket:id="authors" />
> 
> In my Form class, I add it like this:
> 
>                   add(new DropDownChoice("authors", new 
> PropertyModel(this.article, "articleAuthorId"),
>                               acService.getAuthors(), new 
> ChoiceRenderer("authorDisplayName", "articleAuthorId")));
> 
> this.article refers to a class that has a property of articleAuthorId:
> 
>       public long getArticleAuthorId() {
>             return articleAuthorId;
>       }
> 
>       public void setArticleAuthorId(long articleAuthorId) {
>             this.articleAuthorId = articleAuthorId;
>       }
> 
> The acService.getAuthors() call gets a list of Author objects:
> 
> public class Author implements Serializable {
> 
>       private long articleAuthorId;
>       private String authorFirstName;
>       private String authorMiddleName;
>       private String authorLastName;
>       private String authorDisplayName;
> 
> 
>       public String getAuthorFirstName() {
>             return authorFirstName;
>       }
>       public void setAuthorFirstName(String authorFirstName) {
>             this.authorFirstName = authorFirstName;
>       }
>       public String getAuthorMiddleName() {
>             return authorMiddleName;
>       }
>       public void setAuthorMiddleName(String authorMiddleName) {
>             this.authorMiddleName = authorMiddleName;
>       }
>       public String getAuthorLastName() {
>             return authorLastName;
>       }
>       public void setAuthorLastName(String authorLastName) {
>             this.authorLastName = authorLastName;
>       }
>       public String getAuthorDisplayName() {
>             return authorDisplayName;
>       }
>       public void setAuthorDisplayName(String authorDisplayName) {
>             this.authorDisplayName = authorDisplayName;
>       }
>       public Long getId()
>       {
>             return new Long(getArticleAuthorId());
>       }
>       public long getArticleAuthorId() {
>             return articleAuthorId;
>       }
>       public void setArticleAuthorId(long articleAuthorId) {
>             this.articleAuthorId = articleAuthorId;
>       }
> }
> 
> The error I get when I try to render the page is:
> 
> WicketMessage: No get method defined for class: class java.lang.Long 
> expression: articleAuthorId
> 
> I don't understand this, as the class used for the choices is Author, not 
> java.lang.Long ....
> 
> Any help appreciated!
> 
> Thanks
> 
> 
> 
> 
> _______________________________________________________
> 
> The  information in this email or in any file attached
> hereto is intended only for the personal and confiden-
> tial  use  of  the individual or entity to which it is
> addressed and may contain information that is  propri-
> etary  and  confidential.  If you are not the intended
> recipient of this message you are hereby notified that
> any  review, dissemination, distribution or copying of
> this message is strictly prohibited.  This  communica-
> tion  is  for information purposes only and should not
> be regarded as an offer to sell or as  a  solicitation
> of an offer to buy any financial product. Email trans-
> mission cannot be guaranteed to be  secure  or  error-
> free. P6070214

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to