This Confluence has been LDAP enabled, if you are an ASF Committer, please use your LDAP Credentials to login. Any problems file an INFRA jira ticket please.

Skip to end of metadata
Go to start of metadata
Table of contents

Scope

ComponentBackground | componentJavadoc=Panel

Background

A Panel is a reusable component that holds markup and other components. If you want to reuse a component without copying its markup into each page markup, extend the class Panel:

You can use Markup inheritance with Panels too.

See Panels and borders to see the difference between Panels and Borders and Fragment to see how to use 'in-line' panels.

Panels can be used to create dynamic markup hierarchies.

FAQ

Examples

Typical usage

UserPanel.java:

    public class UserPanel extends Panel {
      public UserPanel(String id, User user) {
        super(id);
        add(new Label("username", user.getUsername()));
        add(new Label("lastLogin", user.getLastLogin()));
      }
    }

UserPanel.html:

    <wicket:panel>
      User:        <span wicket:id="username">dummy name</span><br/>
      Last log-in: <span wicket:id="lastLogin">2037-09-10 10:21:59h</span>
    </wicket:panel>

That's for your reusable panel, which you can now use anywhere like:

    add(new UserPanel("user", user);

and:

    <span wicket:id="user">[user data]</span>

or for better previewability:

    <span wicket:id="user">
      <wicket:remove>
        User:        dummy name<br/>
        Last log-in: 2037-09-10 10:21:59h
      <wicket:remove>
    </span>

Advanced example using a ListView

UsersListPanel.java:

    public class UsersListPanel extends Panel {
      public UsersListPanel(String id, List users) {
        super(id);
        add(new ListView("users", users) {
           public void populateItem(final ListItem p_item) {
             final User user = (User) p_item.getModelObject();
             p_item.add(new Label("username", user.getUsername()));
             p_item.add(new Label("lastLogin", user.getLastLogin()));
        }});
      }
    }

UsersListPanel.html:

    <wicket:panel>
      <table>
        <tr>
          <th>user name</th>
          <th>last login</th>
        </tr>

        <tr wicket:id="users">
          <td><span wicket:id="username"></span></td>
          <td><span wicket:id="lastLogin"></span></td>
        </tr>
      </table>
    </wicket:panel>

That's for your reusable panel, which you can now use anywhere like:

    add(new UsersListPanel("users", users));

and:

    <span wicket:id="users">[users here]</span>

or for better previewability:

    <span wicket:id="users">
      <wicket:remove>
      <table>
        <tr>
          <th>user name</th>
          <th>last login</th>
        </tr>

        <tr>
          <td>dummy Username</td>
          <td>2037-09-10 10:21:59h</td>
        </tr>
      </table>
      <wicket:remove>
    </span>