You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by Mostafa Mohamed <es...@gmail.com> on 2009/08/16 16:55:54 UTC
WARN - Couldn't resolve model type, please set the type yourself.
Hi,
i have a form to add an item, i can select the type of this item from
a drop down choice and accordingly the fields specific to the item
will be replaced. before adding this line:
AjaxFormValidatingBehavior.addToAllFormComponents(form, "onblur");
everything worked perfectly, i would have my form validated. i'd find
the items added to the database and no problem seems to appear.
when i added this line to get ajax validation, after clicking on the
type in the drop down choice i'd get the following warning:
WARN org.apache.wicket.markup.html.form.AbstractTextComponent -
Couldn't resolve model type of
Model:classname=[org.apache.wicket.model.CompoundPropertyModel$AttachedCompoundPropertyModel]:nestedModel=[Model:classname=[org.apache.wicket.model.CompoundPropertyModel]:nestedModel=[Model:classname=[main.java.web.components.addedit.AddPublicationPanel$10]:attached=true:tempModelObject=[main.java.domain.publication.Article@745f]]]
for [MarkupContainer [Component id = ISBN]], please set the type
yourself.
followed by this exception:
WicketMessage: No get method defined for class: class
main.java.domain.publication.Article expression: ISBN
Root cause:
org.apache.wicket.WicketRuntimeException: No get method defined for
class: class main.java.domain.publication.Article expression: ISBN
the weird thing is that model of the form when printed is correct.
here is my .java:
public class AddPublicationPanel extends BasicPanel {
// services
@SpringBean
private IDepartmentAccessService departmentAccessService;
@SpringBean
private IPublicationAccessService publicationAccessService;
@SpringBean
private IUserAccessService userAccessService;
// lists used for DropDownChoice
private List<Short> listYear;
private List<Byte> listMonth;
// components
private Form form;
private FeedbackPanel feedback;
private AjaxFallbackButton clear;
private WebMarkupContainer detailsBook, detailsConferencePaper,
detailsTechnicalReport, detailsWorkshop, detailsArticle,
detailsBookChapter, detailsCurrent;
private LoadableDetachableModel book, conferencePaper, technicalReport,
workshop, article, bookChapter;
private FormComponentFeedbackBorder publicationTypeBorder;
// common fields
private DropDownChoice publicationType, year, month;
private TextField title, keywords;
private AutoCompleteTextFieldUser[] authors;
private AjaxFallbackLink addAuthor, removeAuthor;
private TextArea abstractText;
private ListMultipleChoice departments;
private CheckBox reproducible, passwordProtected;
// book details
private TextField bookISBN, bookSeries, bookEdition, bookVolume,
bookPublisherName, bookPublisherAddress;
// conference paper details
private TextField conferencePaperBookTitle, conferencePaperPages,
conferencePaperPublisherName, conferencePaperPublisherAddress,
conferencePaperEditors, conferencePaperAddress,
conferencePaperSponsors;
// technical report details
private DropDownChoice technicalReportType;
private TextField technicalReportInstitutionName,
technicalReportInstitutionAddress;
// workshop details
private TextField workshopName, workshopNumber, workshopAddress;
// article details
private TextField articleJournalName, articleVolume, articleIssue,
articlePages;
// book chapter details
private TextField bookChapterTitle, bookChapterISBN, bookChapterSeries,
bookChapterEdition, bookChapterVolume, bookChapterPublisherName,
bookChapterPublisherAddress;
// custom validators
private PatternValidator pagesPatternValidator, keywordsPatternValidator;
public AddPublicationPanel() {
super("block", "Add Publication");
initPatternValidators();
initLists();
initModels();
initCommon();
initDetails();
AjaxFormValidatingBehavior.addToAllFormComponents(form, "onblur");
}
private void initCommon() {
add((feedback = new FeedbackPanel("feedback")).setOutputMarkupId(true));
add(form = new Form("form", new CompoundPropertyModel(book)) {
protected void onSubmit() {
setPublicationAuthors();
setPublicationKeywords();
setPublicationCreationDate();
publicationAccessService.savePublication((IPublication) form
.getModelObject());
detailsCurrent.setVisible(false);
clearAuthors();
}
});
// publicationType
publicationType = new DropDownChoice("publicationType", Arrays
.asList(PublicationType.values()), new ChoiceRenderer(
"displayName", "id"));
publicationType.setRequired(true);
publicationType.add(new AjaxFormComponentUpdatingBehavior("onchange") {
@Override
protected void onUpdate(AjaxRequestTarget target) {
target.addComponent(feedback);
target.addComponent(detailsArticle);
target.addComponent(detailsBook);
target.addComponent(detailsBookChapter);
target.addComponent(detailsConferencePaper);
target.addComponent(detailsTechnicalReport);
target.addComponent(detailsWorkshop);
if (((PublicationType) publicationType.getModelObject()) == null) {
detailsCurrent.setVisible(false);
} else {
if (((PublicationType) publicationType.getModelObject())
.getId() == 0) {
replaceDetails(detailsArticle).setModel(
new CompoundPropertyModel(article));
} else {
if (((PublicationType) publicationType.getModelObject())
.getId() == 1) {
replaceDetails(detailsBook).setModel(
new CompoundPropertyModel(book));
} else {
if (((PublicationType) publicationType
.getModelObject()).getId() == 2) {
replaceDetails(detailsBookChapter).setModel(
new CompoundPropertyModel(bookChapter));
} else {
if (((PublicationType) publicationType
.getModelObject()).getId() == 3) {
replaceDetails(detailsConferencePaper)
.setModel(
new CompoundPropertyModel(
conferencePaper));
} else {
if (((PublicationType) publicationType
.getModelObject()).getId() == 4) {
replaceDetails(detailsTechnicalReport)
.setModel(
new CompoundPropertyModel(
technicalReport));
} else {
if (((PublicationType) publicationType
.getModelObject()).getId() == 5) {
replaceDetails(detailsWorkshop)
.setModel(
new CompoundPropertyModel(
workshop));
}
}
}
}
}
}
}
}
});
form.add((publicationTypeBorder = new FormComponentFeedbackBorder(
"publicationTypeBorder")).add(publicationType)
.setOutputMarkupId(true));
// addWithBorder("publicationTypeBorder", form, publicationType);
// title
addWithBorder("titleBorder", form, new TextField("title").setRequired(
true).add(StringValidator.maximumLength(128)));
// year
form.add(new DropDownChoice("year", listYear));
// month
form.add(new DropDownChoice("month", listMonth, new ChoiceRenderer() {
@Override
public Object getDisplayValue(Object object) {
return (new DateFormatSymbols().getMonths())[((Byte) object)
.intValue()];
}
}));
// abstractText
addWithBorder("abstractTextBorder", form, new TextArea("abstractText")
.add(StringValidator.maximumLength(2048)));
// reproducible
form.add(new CheckBox("reproducible"));
// passwordProtected
form.add(new CheckBox("passwordProtected"));
// keywords
addWithBorder("keywordsBorder", form, new TextField("keywords").add(
keywordsPatternValidator).add(
StringValidator.maximumLength(2048)));
// authors (internal & external)
authors = new AutoCompleteTextFieldUser[10];
for (int i = 0; i < 10; i++) {
(authors[i] = new AutoCompleteTextFieldUser("author" + i))
.setOutputMarkupId(true)
.setOutputMarkupPlaceholderTag(true);
if (i == 0) {
authors[i].setRequired(true).setVisible(true);
addWithBorder("authorBorder", form, authors[0]);
} else {
authors[i].setVisible(false);
form.add(authors[i]);
}
}
form.add((addAuthor = (new AjaxFallbackLink("add") {
@Override
public void onClick(AjaxRequestTarget target) {
int pointer;
for (pointer = 0; pointer < 10; pointer++) {
if (!authors[pointer].isVisible()) {
break;
}
}
if (pointer < 10) {
authors[pointer].setVisible(true);
if (pointer == 9)
this.setVisible(false);
if (pointer > 0)
removeAuthor.setVisible(true);
if (target != null) {
target.addComponent(authors[pointer]);
target.addComponent(removeAuthor);
target.addComponent(this);
}
}
}
})).setOutputMarkupId(true).setOutputMarkupPlaceholderTag(true));
form.add((removeAuthor = (new AjaxFallbackLink("remove") {
@Override
public void onClick(AjaxRequestTarget target) {
int pointer;
for (pointer = 0; pointer < 10; pointer++) {
if (!authors[pointer].isVisible()) {
break;
}
}
pointer--;
if (pointer > 0)
authors[pointer].setVisible(false);
if (pointer == 1)
this.setVisible(false);
if (pointer <= 9)
addAuthor.setVisible(true);
if (target != null) {
target.addComponent(authors[pointer]);
target.addComponent(addAuthor);
target.addComponent(this);
}
}
})).setVisible(false).setOutputMarkupId(true)
.setOutputMarkupPlaceholderTag(true));
// departments
addWithBorder("departmentsBorder", form, new ListMultipleChoice(
"departments", new LoadableDetachableModel() {
@Override
protected Object load() {
return departmentAccessService.findAllDepartments();
}
}, new ChoiceRenderer("name", "id")).setRequired(true));
// clear button
form.add((new AjaxFallbackButton("clear", form) {
@Override
protected void onSubmit(AjaxRequestTarget target, Form form) {
detailsCurrent.setVisible(false);
form.clearInput();
clearAuthors();
if (target != null) {
target.addComponent(form);
for (AutoCompleteTextFieldUser author : authors) {
target.addComponent(author);
}
}
}
}).setDefaultFormProcessing(false));
// trying ajax
/* new AjaxFormValidatingBehavior(form, "onkeystroke"); */
}
private void initModels() {
book = new LoadableDetachableModel() {
@Override
protected Object load() {
IBook book = new Book();
// setting default values
book.setYear(new Short((short) Calendar.getInstance().get(
Calendar.YEAR)));
book.setPublisher(new Publisher());
return book;
}
};
bookChapter = new LoadableDetachableModel() {
@Override
protected Object load() {
IBookChapter bookChapter = new BookChapter();
// setting default values
bookChapter.setYear(new Short((short) Calendar.getInstance()
.get(Calendar.YEAR)));
bookChapter.setBookPublisher(new Publisher());
return bookChapter;
}
};
article = new LoadableDetachableModel() {
@Override
protected Object load() {
IArticle article = new Article();
// setting default values
article.setYear(new Short((short) Calendar.getInstance().get(
Calendar.YEAR)));
return article;
}
};
workshop = new LoadableDetachableModel() {
@Override
protected Object load() {
IWorkshop workshop = new Workshop();
// setting default values
workshop.setYear(new Short((short) Calendar.getInstance().get(
Calendar.YEAR)));
return workshop;
}
};
conferencePaper = new LoadableDetachableModel() {
@Override
protected Object load() {
IConferencePaper conferencePaper = new ConferencePaper();
// setting default values
conferencePaper.setYear(new Short((short) Calendar
.getInstance().get(Calendar.YEAR)));
conferencePaper.setConferenceBookPublisher(new Publisher());
return conferencePaper;
}
};
technicalReport = new LoadableDetachableModel() {
@Override
protected Object load() {
ITechnicalReport technicalReport = new TechnicalReport();
// setting default values
technicalReport.setYear(new Short((short) Calendar
.getInstance().get(Calendar.YEAR)));
technicalReport.setType(TechnicalReportType.PRIMARY_RESEARCH);
technicalReport.setInstitution("GUC");
technicalReport
.setInstitutionAddress("New Cairo City, El Tagamoa El Khames");
return technicalReport;
}
};
}
private void initDetails() {
// article
(detailsArticle = new WebMarkupContainer("detailsArticle")).setVisible(
false).setOutputMarkupId(true).setOutputMarkupPlaceholderTag(
true);
addWithBorder("journalNameBorder", detailsArticle, new TextField(
"journalName") {
@Override
public void onBeforeRender() {
super.onBeforeRender();
setRequired(true);
add(StringValidator.maximumLength(128));
}
});
addWithBorder("volumeBorder", detailsArticle, new TextField(
"journalVolume") {
@Override
public void onBeforeRender() {
super.onBeforeRender();
add(NumberValidator.range(0, Short.MAX_VALUE));
}
});
addWithBorder("issueBorder", detailsArticle, new TextField(
"journalIssue") {
@Override
public void onBeforeRender() {
super.onBeforeRender();
add(NumberValidator.range(0, Long.MAX_VALUE));
}
});
addWithBorder("pagesBorder", detailsArticle, new TextField(
"journalPages") {
@Override
public void onBeforeRender() {
super.onBeforeRender();
add(StringValidator.maximumLength(64));
add(pagesPatternValidator);
}
});
// book
(detailsBook = new WebMarkupContainer("detailsBook")).setVisible(false)
.setOutputMarkupId(true).setOutputMarkupPlaceholderTag(true);
addWithBorder("ISBNBorder", detailsBook, new TextField("ISBN") {
@Override
public void onBeforeRender() {
super.onBeforeRender();
setRequired(true);
add(StringValidator.lengthBetween(10, 13));
}
});
addWithBorder("seriesBorder", detailsBook, new TextField("series") {
@Override
public void onBeforeRender() {
super.onBeforeRender();
add(StringValidator.maximumLength(128));
}
});
addWithBorder("editionBorder", detailsBook, new TextField("edition") {
@Override
public void onBeforeRender() {
super.onBeforeRender();
add(StringValidator.maximumLength(64));
}
});
addWithBorder("volumeBorder", detailsBook, new TextField("volume") {
@Override
public void onBeforeRender() {
super.onBeforeRender();
add(NumberValidator.range(0, Short.MAX_VALUE));
}
});
addWithBorder("publisherNameBorder", detailsBook, new TextField(
"publisher.name") {
@Override
public void onBeforeRender() {
super.onBeforeRender();
setRequired(true);
add(StringValidator.maximumLength(128));
}
});
addWithBorder("publisherAddressBorder", detailsBook, new TextField(
"publisher.address") {
@Override
public void onBeforeRender() {
super.onBeforeRender();
add(StringValidator.maximumLength(128));
}
});
// book chapter
(detailsBookChapter = new WebMarkupContainer("detailsBookChapter"))
.setVisible(false).setOutputMarkupId(true)
.setOutputMarkupPlaceholderTag(true);
addWithBorder("bookISBNBorder", detailsBookChapter, new TextField(
"bookISBN") {
@Override
public void onBeforeRender() {
super.onBeforeRender();
setRequired(true);
add(StringValidator.lengthBetween(10, 13));
}
});
addWithBorder("bookTitleBorder", detailsBookChapter, new TextField(
"bookTitle") {
@Override
public void onBeforeRender() {
super.onBeforeRender();
setRequired(true);
add(StringValidator.maximumLength(128));
}
});
addWithBorder("seriesBorder", detailsBookChapter, new TextField(
"bookSeries") {
@Override
public void onBeforeRender() {
super.onBeforeRender();
add(StringValidator.maximumLength(128));
}
});
addWithBorder("editionBorder", detailsBookChapter, new TextField(
"bookEdition") {
@Override
public void onBeforeRender() {
super.onBeforeRender();
add(StringValidator.maximumLength(64));
}
});
addWithBorder("volumeBorder", detailsBookChapter, new TextField(
"bookVolume") {
@Override
public void onBeforeRender() {
super.onBeforeRender();
add(NumberValidator.range(0, Short.MAX_VALUE));
}
});
addWithBorder("pagesBorder", detailsBookChapter, new TextField(
"bookPages") {
@Override
public void onBeforeRender() {
super.onBeforeRender();
setRequired(true);
add(StringValidator.maximumLength(64));
add(pagesPatternValidator);
}
});
addWithBorder("publisherNameBorder", detailsBookChapter, new TextField(
"bookPublisher.name") {
@Override
public void onBeforeRender() {
super.onBeforeRender();
setRequired(true);
add(StringValidator.maximumLength(128));
}
});
addWithBorder("publisherAddressBorder", detailsBookChapter,
new TextField("bookPublisher.address") {
@Override
public void onBeforeRender() {
super.onBeforeRender();
add(StringValidator.maximumLength(128));
}
});
// conference paper
(detailsConferencePaper = new WebMarkupContainer(
"detailsConferencePaper")).setVisible(false).setOutputMarkupId(
true).setOutputMarkupPlaceholderTag(true);
addWithBorder("conferenceBookTitleBorder", detailsConferencePaper,
new TextField("conferenceBookTitle") {
@Override
public void onBeforeRender() {
super.onBeforeRender();
setRequired(true);
add(StringValidator.maximumLength(128));
}
});
addWithBorder("conferenceAddressBorder", detailsConferencePaper,
new TextField("conferenceAddress") {
@Override
public void onBeforeRender() {
super.onBeforeRender();
add(StringValidator.maximumLength(128));
}
});
addWithBorder("pagesBorder", detailsConferencePaper, new TextField(
"conferenceBookPages") {
@Override
public void onBeforeRender() {
super.onBeforeRender();
add(StringValidator.maximumLength(64));
add(pagesPatternValidator);
}
});
addWithBorder("editorsBorder", detailsConferencePaper, new TextField(
"editors") {
@Override
public void onBeforeRender() {
super.onBeforeRender();
add(StringValidator.maximumLength(256));
}
});
addWithBorder("sponsorsBorder", detailsConferencePaper, new TextField(
"sponsors") {
@Override
public void onBeforeRender() {
super.onBeforeRender();
add(StringValidator.maximumLength(512));
}
});
addWithBorder("publisherAddressBorder", detailsConferencePaper,
new TextField("conferenceBookPublisher.address") {
@Override
public void onBeforeRender() {
super.onBeforeRender();
add(StringValidator.maximumLength(128));
}
});
addWithBorder("publisherNameBorder", detailsConferencePaper,
new TextField("conferenceBookPublisher.name") {
@Override
public void onBeforeRender() {
super.onBeforeRender();
setRequired(true);
add(StringValidator.maximumLength(128));
}
});
// technical report
(detailsTechnicalReport = new WebMarkupContainer(
"detailsTechnicalReport")).setVisible(false).setOutputMarkupId(
true).setOutputMarkupPlaceholderTag(true);
addWithBorder("typeBorder", detailsTechnicalReport, new DropDownChoice(
"type", Arrays.asList(TechnicalReportType.values()),
new ChoiceRenderer("displayName", "id")));
addWithBorder("institutionBorder", detailsTechnicalReport,
new TextField("institution") {
@Override
public void onBeforeRender() {
super.onBeforeRender();
setRequired(true);
add(StringValidator.maximumLength(128));
}
});
addWithBorder("institutionAddressBorder", detailsTechnicalReport,
new TextField("institutionAddress") {
@Override
public void onBeforeRender() {
super.onBeforeRender();
add(StringValidator.maximumLength(128));
}
});
// workshop
(detailsWorkshop = new WebMarkupContainer("detailsWorkshop"))
.setVisible(false).setOutputMarkupId(true)
.setOutputMarkupPlaceholderTag(true);
addWithBorder("workshopTitleBorder", detailsWorkshop, new TextField(
"workshopTitle") {
@Override
public void onBeforeRender() {
super.onBeforeRender();
setRequired(true);
add(StringValidator.maximumLength(128));
}
});
addWithBorder("workshopNumberBorder", detailsWorkshop, new TextField(
"workshopNumber") {
@Override
public void onBeforeRender() {
super.onBeforeRender();
add(NumberValidator.range(0, Long.MAX_VALUE));
}
});
addWithBorder("workshopAddressBorder", detailsWorkshop, new TextField(
"workshopAddress") {
@Override
public void onBeforeRender() {
super.onBeforeRender();
add(StringValidator.maximumLength(128));
}
});
detailsCurrent = detailsBook;
form.add(detailsArticle).add(detailsBook).add(detailsBookChapter).add(
detailsConferencePaper).add(detailsConferencePaper).add(
detailsTechnicalReport).add(detailsWorkshop);
}
private void initLists() {
// years
listYear = new ArrayList<Short>();
for (short i = (short) Calendar.getInstance().get(Calendar.YEAR); i
>= 1950; i--) {
listYear.add(new Short(i));
}
// months
listMonth = new ArrayList<Byte>();
for (byte i = 0; i < 12; i++) {
listMonth.add(new Byte((byte) i));
}
}
private void initPatternValidators() {
pagesPatternValidator = new PatternValidator(
"(\\s*\\d+\\s*((\\s*-\\s*\\d+)?\\s*[,;]?\\s*))*");
keywordsPatternValidator = new PatternValidator(
"(\\s*\\w+\\s*,*\\s*)*,*\\s*");
}
private void addWithBorder(String id, WebMarkupContainer parent,
FormComponent formComponent) {
final FormComponentFeedbackBorder border = new FormComponentFeedbackBorder(
id);
border.setOutputMarkupId(true);
border.add(formComponent);
parent.add(border);
formComponent.add(new AjaxFormComponentUpdatingBehavior("onkeyup") {
@Override
protected void onUpdate(AjaxRequestTarget target) {
target.addComponent(feedback);
target.addComponent(border);
}
});
}
private Form replaceDetails(WebMarkupContainer replacement) {
detailsCurrent.setVisible(false);
(detailsCurrent = replacement).setVisible(true);
return form;
}
private void setPublicationAuthors() {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < authors.length; i++) {
if (!authors[i].isVisible())
break;
if (authors[i].getModelObject() != null) {
IUser user = userAccessService.getUserByFullName(authors[i]
.getModelObjectAsString());
if (i != 0) {
builder.append("#");
}
if (user != null) {
builder.append(user.getId());
((IPublication) form.getModelObject())
.addInternalAuthor(user);
} else {
builder.append(authors[i].getModelObjectAsString());
}
}
}
((IPublication) form.getModelObject()).setAuthors(builder.toString());
}
private void setPublicationKeywords() {
String keywords = null;
if (((IPublication) form.getModelObject()).getKeywords() != null) {
keywords = ((IPublication) form.getModelObject()).getKeywords()
.trim();
keywords += (keywords.charAt(keywords.length() - 1) != ',' ? ","
: "");
}
((IPublication) form.getModelObject()).setKeywords(keywords);
}
private void setPublicationCreationDate() {
((IPublication) form.getModelObject()).setCreatedOn(new Date());
}
private void clearAuthors() {
for (AutoCompleteTextFieldUser author : authors) {
author.clear();
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org