在一个 jsp 文件的 table 中显示不同的 类

displaying different classes in a table from one jsp file

我正在制作一个小型应用程序,我有一些 class 没有任何共同点(产品、国家/地区、客户等),我的目标是拥有一个 jsp 文件可以在 html table 中显示对象(或给定的对象列表),因为我目前有一个 jsp 文件用于每个 class (products.jsp,country.jsp等)。

我整天都在想这个问题,但我不知道该怎么做。

有什么建议吗?

编辑:试图更清楚和具体一点: 我有一个 "target" 参数,其中包含用户想要可视化的数据类型("product"、"country" 等)。然后 servlet 将在变量中加载 Products/countries 等列表并将其发送到 jsp。 我希望 jsp 文件显示他刚刚在 table 中收到的任何内容。 问题是我该怎么做?目前我的 jsp 文件正在 "manually" 使用每种对象的 getter,我怎样才能使它通用?

我不确定我是否正确理解了这个问题,无论如何这些都是我的建议。

如果您决定 table 的列,那么您可以为 table 的每个字段和 "transform" 您拥有的每个不同对象创建一个具有属性的包装对象(Product, Country...) 放入此包装器中,然后创建这些包装器对象的列表以显示在 table.

否则将所有对象按原样放入列表中,然后根据需要尽可能多地显示 table 中的信息。

我会选择第一种方式

一段时间后,我找到了解决问题的办法。 我对 class 我的所有数据 class 继承自 class 实施了以下方法。

public ArrayList<Pair<String, String>> toPairs() {

    ArrayList<Pair<String, String>> list = new ArrayList<Pair<String, String>>();
    try {
        Class<?> objClass = this.getClass();
        Field[] fields = objClass.getDeclaredFields();
        for(Field field : fields) {
            field.setAccessible(true);
            String value = field.get(this).toString();
            String name = field.getName();

            Pair<String, String> pair = new Pair<String, String>(name, value);
            list.add(pair);
        }
        return list;
    } catch(Exception e) {
        System.out.println(e.getMessage());
        return null;
    }
}

这可能不是最有效的方法,但我最终做到了。

我的 servlet 从数据库中获取数据并将所有内容配对(来自 this 答案)。最后,我将配对列表传递到我的 jsp 文件。

<table>
    <c:forEach items="${data}" var="lpair" varStatus="loop">
        <c:if test="${loop.first}">
            <tr>
                <c:forEach items="${lpair}" var="pair">
                    <th>${pair.getL()}</th>
                </c:forEach>
            </tr>
        </c:if>
        <tr>
            <c:forEach items="${lpair}" var="pair">
                <td>${pair.getR()}</td>
            </c:forEach>
        </tr>

    </c:forEach>
</table>

一个易于理解的示例:如果我想显示国家/地区,servlet 将从数据库中获取它们并使每个国家/地区成对列表,国家/地区对象将变成类似的东西:

"id":"*someid"
"short":"USA"
"name":"United States of America"

因此 jsp 文件收到一个国家列表,这些国家/地区本身就存放在列表中,因此是双 foreach。

这是我第一次尝试回答(即使这是我自己的问题)所以我希望它是可以理解的。 很抱歉可能的语言错误,英语不是我的母语。