Hello, i have the following error in this scenario:
The class Dog is non serializable
public class Dog {
private String name;
private int age;
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
That is why i create a model:
private static class DetachedDogModel extends LoadableDetachableModel<Dog> {
private static final long serialVersionUID = 1L;
public String internalName;
public int internalAge;
public DetachedDogModel(final String name, final int age) {
super();
internalName = name;
internalAge = age;
}
@Override
protected Dog load() {
return new Dog(internalName, internalAge);
}
}
My goal is show a table of read only dogs. This table can be sorted by name and age
ArrayList<IModel<Dog>> dogs = new ArrayList<IModel<Dog>>();
dogs.add(new DetachedDogModel("Juan", 12));
dogs.add(new DetachedDogModel("Pedro", 15));
dogs.add(new DetachedDogModel("Marta", 22));
BeanMetaData meta = new BeanMetaData(Dog.class, null, this, null, true);
add(new BeanForm("wicketBean", dogs, meta));
When i trying to sort for the property name i have the followed exception:
org.apache.wicket.WicketRuntimeException: No get method defined for class: class com.idtech.g2s.host.test.wicketbean.WicketBeanTestPanel$DetachedDogModel expression: name
at org.apache.wicket.util.lang.PropertyResolver.getGetAndSetter(PropertyResolver.java:439)
at org.apache.wicket.util.lang.PropertyResolver.getObjectAndGetSetter(PropertyResolver.java:281)
at org.apache.wicket.util.lang.PropertyResolver.getValue(PropertyResolver.java:90)
at com.googlecode.wicketwebbeans.model.ElementMetaData$$M$bf12fe40.getPropertyValue(ElementMetaData.java:403)
at com.googlecode.wicketwebbeans.model.ElementMetaData$$A$bf12fe40.getPropertyValue(<generated>)
at com.googlecode.wicketwebbeans.model.ElementMetaData.getPropertyValue(ElementMetaData.java:407)
at com.googlecode.wicketwebbeans.containers.BeanTablePanel$PropertyComparator.compare(BeanTablePanel.java:298)
Looks like the method getPropertyValue in the
class ElementMetaData tries to get the property from the Model
(DetachedDogModel ) and not from its value.
to fix that i modified the ElementMetaData method form:
public Object getPropertyValue(Object bean)
{
if (bean == null) {
return null;
}
return PropertyResolver.getValue(
getPropertyName(), bean);
}
to
public Object getPropertyValue(Object bean)
{
if (bean != null && bean instanceof IModel) {
bean = ((IModel<?>)bean).getObject();
}
if (bean == null) {
return null;
}
return PropertyResolver.getValue(getPropertyName(), bean);
}
I have my doubs it this workaround had not secondary effects. Any ideas?
Regards
Fernando