Wicketopia includes a "Scaffold" component, which is inspired by Grails' scaffolding support. The scaffolding is generated based on your class' metadata. For example, consider the following domain class (taken from the example application):
public class Person extends UuidEntity
{
private String firstName;
private String lastName;
private String ssn;
private String email;
private Gender gender;
private LocalDate dob;
private boolean smoker;
private LocalTime workDayBegin = new LocalTime(9, 0);
private LocalTime workDayEnd = new LocalTime(17, 0);
@DatePattern("MM/dd/yyyy")
public LocalDate getDob()
{
return dob;
}
public void setDob(LocalDate dob)
{
this.dob = dob;
}
@Email
@Order(3)
public String getEmail()
{
return email;
}
public void setEmail(String email)
{
this.email = email;
}
@Order(1)
public String getFirstName()
{
return firstName;
}
public void setFirstName(String firstName)
{
this.firstName = firstName;
}
public Gender getGender()
{
return gender;
}
public void setGender(Gender gender)
{
this.gender = gender;
}
@Required
@Order(2)
public String getLastName()
{
return lastName;
}
public void setLastName(String lastName)
{
this.lastName = lastName;
}
@DisplayName("SSN")
@Order(4)
@Pattern("^\\d{3}[- ]?\\d{2}[- ]?\\d{4}$")
@VisibleForRole("ROLE_ADMIN")
public String getSsn()
{
return ssn;
}
public void setSsn(String ssn)
{
this.ssn = ssn;
}
//@DatePattern("hh:mm a")
public LocalTime getWorkDayBegin()
{
return workDayBegin;
}
public void setWorkDayBegin(LocalTime workDayBegin)
{
this.workDayBegin = workDayBegin;
}
public LocalTime getWorkDayEnd()
{
return workDayEnd;
}
public void setWorkDayEnd(LocalTime workDayEnd)
{
this.workDayEnd = workDayEnd;
}
public boolean isSmoker()
{
return smoker;
}
public void setSmoker(boolean smoker)
{
this.smoker = smoker;
}
}Now, let's create a web page that shows a scaffolding for that domain class:
public class HomePage extends WebPage
{
@SpringBean
private PersistenceProvider persistenceProvider;
public HomePage()
{
add(new Scaffold<Person>("scaffold", Person.class, persistenceProvider));
}
}That's it! That's all you have to do to get a scaffolding up and running. A scaffolding will automatically generate the following views: