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: