Overview

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):

Example Domain Class...

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:

Web Page Java Code...

public class HomePage extends WebPage
{
    @SpringBean
    private PersistenceProvider persistenceProvider;

    public HomePage()
    {
        add(new Scaffold<Person>("scaffold", Person.class, persistenceProvider));
    }
}

Web Page Markup...

<html>
  <body>
    <div wicket:id="scaffold" />
  </body>
</html>

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:

Scaffold List

Scaffold List

Scaffold View

Scaffold View

Scaffold Create

Scaffold Update

Scaffold Update

Scaffold Update