在一个表中显示来自一个jsp文件

时间:2015-07-03 14:38:25

标签: jsp jstl

我正在制作一个小应用程序而且我有一些没有任何共同点的类(产品,国家,客户等),我的目标是拥有一个可以在html表中显示该对象的jsp文件(或者它给出的对象列表)因为我目前每个类都有一个jsp文件(products.jsp,country.jsp等)。

我一整天都在考虑这个问题,但我无法知道如何做到这一点。

有什么建议吗?

编辑:尝试更清晰,更具体: 我有一个"目标"包含用户想要可视化的数据类型的参数("产品"," country"等)。然后,servlet将在变量中加载Products / countries等列表并将其发送到jsp。 我希望jsp文件能够显示他刚刚在表中收到的内容。 问题是我该怎么做?目前我的jsp文件正在进行"手动"使用每种类型对象的getter,我该如何制作那种通用的?

2 个答案:

答案 0 :(得分:1)

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

如果您确定了表的列,那么您可以创建一个包装器对象,该对象具有表的每个字段的属性,并将您拥有的每个不同对象(Product,Country ...)“转换”到此包装器中然后创建一个包含在表中的包装器对象的列表。

否则将所有对象放在列表中,然后根据需要执行以显示表中的信息。

我会选择第一种方式。

答案 1 :(得分:0)

过了一会儿,我找到了解决问题的方法。 我将以下方法实现到一个类,所有数据类都继承自。

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从数据库中获取数据并将所有内容放入Pair中(来自this answer)。最后,我将一对Pa列表传递给我的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将从数据库中获取它们并使每个国家成为一对列表的国家,那么Country对象就会变成这样:

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

因此,jsp文件会收到列表中自己存储的国家/地区列表,因此是双重预告。

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