与apache wicket填充表

时间:2015-08-11 10:03:17

标签: wicket

我需要像这样动态弹出一个表。问题是,它不是一个简单的表格。它具有“rowspan”特征。

对于单个条目,有多个字段条目存储在单独的行中。

与Wicket一起使用这有点棘手。任何帮助,建议,建议都会很棒。

这是HTML页面上的表格: 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>

3 个答案:

答案 0 :(得分:1)

您可以尝试以下方法:

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>

爪哇:

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()));
            }
        });
    }
});

请注意,这样没有任何提供者的用户根本不会出现在列表中。

答案 1 :(得分:0)

wicket:container解决了这个问题。

您的html文件如下所示:

<wicket:container wicket:id="doubleRow">
<tr>
    ...
    First Row components
    ...
</tr>
<tr>  
    ...
    Second Row components
    ...
</tr>
</wicket:container>

答案 2 :(得分:0)

假设您使用带有列的select * from table_constraints where table_name='bla bla'; : 在跨越多行的单元格中,使用模型设置DataTable属性。只要该单元格的值没有变化,该模型中的值就会增加。

检测到内容更改后,您将创建一个行数为1的新模型,并将其再次分配给当前单元格。

这样的事情可能会这样,但我现在无法测试它:

rowspan