Populating table with apache wicket

Madhavi Jouhari

I need to dynamically poplulate a table like this. The problem is, it is not a simple table. It has the "rowspan" characteristics.

For a single entry there are multiple fields entries which are being stored in separate rows.

This is a little tricky to populate with Wicket. Any help , advises, suggestions would be great.

This is what the table looks like on the HTML page: https://jsfiddle.net/sayrandhri/4ktmy6cn/2/

<table>
    <tr>
        <th>Name</th>
        <th>Role</th>
        <th>Company</th>
        <th>Request</th>
        <th>Change</th>
    </tr>
    <tr>
        <td rowspan=2>ABC</td>
        <td rowspan=2>User</td>
        <td>Y</td>
        <td>True</td>
        <td>False</td>
    </tr>
    <tr>  
        <td>Telecom</td>
        <td>True</td>
        <td>False</td>
    </tr>
      <tr>
        <td rowspan=3>XYZ </td>
        <td rowspan=3>User</td>
        <td>O </td>
        <td>False</td>
        <td>False</td>
    </tr>
    <tr>  
        <td>Q</td>
        <td>True</td>
        <td>True</td>
    </tr>
     <tr>  
        <td>R</td>
        <td>False</td>
        <td>False</td>
    </tr>
</table>
duo

You can try following approach:

HTML:

<table>
    <tr>
        <th>Name</th>
        <th>Role</th>
        <th>Company</th>
        <th>Request</th>
        <th>Change</th>
    </tr>
    <tbody wicket:id="userList">
        <tr wicket:id="providerList">
            <td wicket:id="userName"></td>
            <td wicket:id="roleName"></td>
            <td wicket:id="provider"></td>
            <td wicket:id="request"></td>
            <td wicket:id="change"></td>
        </tr>
    </tbody>
</table>

Java:

add(new ListView<User>("userList", new PropertyModel<>(this, "users")) {

    @Override
    protected void populateItem(ListItem<User> listItem) {
        final User user = listItem.getModelObject();
        listItem.add(new ListView<Provider>("providerList", user.getProviders()) {

            @Override
            protected void populateItem(ListItem<Provider> listItem) {
                final Provider provider = listItem.getModelObject();

                Label nameLabel = new Label("userName", user.getName());
                Label roleNameLabel = new Label("roleName", user.getRoleName());
                listItem.add(nameLabel);
                listItem.add(roleNameLabel);

                if (user.getProviders().indexOf(provider) == 0) {
                    AttributeAppender attributeAppender =
                            AttributeAppender.append("rowspan", user.getProviders().size());
                    nameLabel.add(attributeAppender);
                    roleNameLabel.add(attributeAppender);
                } else {
                    nameLabel.setVisible(false);
                    roleNameLabel.setVisibilityAllowed(false);
                }

                listItem.add(new Label("provider", provider.getName()));
                listItem.add(new Label("request", provider.isRequest()));
                listItem.add(new Label("change", provider.isChange()));
            }
        });
    }
});

Be advised that this way user without any providers wont show up on the list at all.

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related