我有一个.jsp,用于确定用户可以访问的具体内容。它创建一个XML文件,由前一个jsp读入流中。如何使用读入char数组流的XML数据填充表?
答案 0 :(得分:3)
有很多方法可以从XML文件中获取HTML表格。最干净的方法之一是将XML解析为可传递给JSP的可重用javabeans集合,以便在呈现时可以使用JSTL <c:forEach>
对其进行迭代。 HTML表格。这样每一层都有自己明确的责任。提供JAXB的Java SE对此非常有帮助。
想象一下,您的XML看起来像这样:
<data>
<entry>
<key>foo1</key>
<value>bar1</value>
</entry>
<entry>
<key>foo2</key>
<value>bar2</value>
</entry>
<entry>
<key>foo3</key>
<value>bar3</value>
</entry>
</data>
然后您可以按如下方式创建JAXB javabean:
@XmlRootElement
public class Data {
@XmlElement(name="entry")
private List<Entry> entries;
public List<Entry> getEntries() {
return entries;
}
public static class Entry {
@XmlElement
private String key;
@XmlElement
private String value;
public String getKey() {
return key;
}
public String getValue() {
return value;
}
}
}
然后您可以将其转换为List<Entry>
,如下所示:
List<Entry> entries = JAXBContext.newInstance(Data.class).createUnmarshaller().unmarshal(inputStream).getEntries();
然后,在将请求转发给JSP之前,您可以让servlet(或JSP?:/)将它存储在请求范围中:
request.setAttribute("entries", entries);
最后,您可以在JSP中迭代它并将其作为HTML表格呈现:
<table>
<c:forEach items="${entries}" var="entry">
<tr>
<td><c:out value="${entry.key}" /></td>
<td><c:out value="${entry.value}" /></td>
</tr>
</c:forEach>
</table>
答案 1 :(得分:2)
您可以使用XSLT按原样设置XML样式,或使用XPath在XML上导航并构建适合您需求的表。
但不确定嵌入该逻辑是否干净,我宁愿在bean中处理,你可以从一个bean中获取最终列表,jsp可以用它来生成表。
答案 2 :(得分:0)
那么在你的JSP中除了作为原始XML文档的InputStream之外什么都没有?在我看来,除了学习用于处理XML的Java库之外别无选择。
Google搜索“Java中的XML处理”,您将看到无数可供选择的选项。即使是“将XML转换为您可以在页面的HTML中处理的内容的XSLT”建议,也需要您解析此流。 JAXB API(http://jaxb.java.net/tutorial/section_1_2-Overview.html#Overview)使这一点变得不那么痛苦,允许您将XML文档映射到POJO。
无论如何你看一下,在JSP级别处理它有点代码味道。您应该在其他地方处理XML流,并向您的JSP发送POJO结果以进行演示。
我的2美分值。