在HTML(Servlet/JSP)中打印Jena结果集

3
我正在使用servlet来操作本体论。我已经得到了我的SPARQL查询结果,我想在JSP(Servlet)中显示(打印)这个结果。 下面的代码段可以用来在控制台上打印结果。
com.hp.hpl.jena.query.Query query = QueryFactory.create(queryStr);
QueryExecution qe = QueryExecutionFactory.create(query,model);
com.hp.hpl.jena.query.ResultSet rs = qe.execSelect();
ResultSetFormatter.out(System.out, rs);
有什么想法吗?
2个回答

2

我不懂Jena,但基本上你想要迭代 com.hp.hpl.jena.query.ResultSet 并将信息映射到一个 List<RowObject> 中,其中 RowObject 是您自己的模型类,表示您想在HTML表中显示的单个行。映射完成后,将 List<RowObject> 放入请求范围并将请求转发到JSP。

List<RowObject> results = getItSomeHow();
request.setAttribute("results", results); // Will be available as ${results} in JSP
request.getRequestDispatcher("page.jsp").forward(request, response);

然后在JSP中,使用JSTLc:forEach标签来遍历List<RowObject>,输出HTML表格。

<table>
    <c:forEach items="${results}" var="rowObject">
        <tr>
            <td>${rowObject.someProperty}</td>
            <td>${rowObject.anotherProperty}</td>
            ...
        </tr>
    </c:forEach>
</table>
基于您的其他答案,以下是如何基于Jena的ResultSet创建一个List的方法:
List<RowObject> results = new ArrayList<RowObject>();
while (rs.hasNext()) {
    RowObject result = new RowObject();
    QuerySolution binding = result.nextSolution();
    result.setInd(binding.get("ind"));
    result.setSomethingElse(binding.get("something_else"));
    // ...
    results.add(result);
}
并将其显示如下:
...
<td>${rowObject.ind}</td>
<td>${rowObject.somethingElse}</td>
...

无法创建List<RowObject>,出现了许多错误。除了JSTL之外,还有其他方法可以做到吗?卡在这里了..帮帮我兄弟!谢谢! - smartcode
错误告诉我们问题的原因。你不应该忽略它们,而是要解释它们并相应地修复问题。如果你无法解释错误,请在这里提问。 - BalusC
嘿兄弟, 我用自己的方式找到了答案!非常感谢你的回复和评论! - smartcode
不客气。别忘了标记答案为已接受。或者如果它是根本不同的方法,你应该发布自己的答案。 - BalusC

1

这段代码可以放在你的Servlet中,或者你也可以使用单独的Java类来实现。

com.hp.hpl.jena.query.Query query = QueryFactory.create(queryStr);
QueryExecution qe = QueryExecutionFactory.create(query,model);
com.hp.hpl.jena.query.ResultSet rs = qe.execSelect();

while(rs.hasNext()){

 QuerySolution binding = rs.nextSolution();                     
 System.out.println(binding.get("ind")); 
}
注意: “ind”是你在SPARQL查询SELECT子句中引用的变量。 谢谢!

这与我的答案基本相同,只是您将其打印在错误的位置。通常的做法是在JSP文件(视图)中显示结果,而不是在servlet(控制器)中。您需要创建一个模型并将其传递给视图,如我的答案所述。 - BalusC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,