我在上节课中了解到jsp的自定义标签在自定义标签求值后被html内容替换。
但是将这个概念付诸实践,我遇到了以下问题。 我在 jsp 中有 3 个 div,其中 2 个是静态的,中间的 div 中有一个自定义标签。所以中间div的自定义标签生成的html内容应该只在中间div中替换。
但是,输出暗示了其他东西,如果代码有问题,或者问题开始时使用的语句需要一些修改,请指出我。
首页.jsp
<div style="height: 80px; background-color: #FFA500;">
<%@ include file="banner.html"%>
</div>
<div style="height: 450px;">
<connect:dbConnector user="root" password="" url="jdbc:mysql://localhost/musicstore" scope="session">
</connect:dbConnector>
<connect:Query where="select * from musicstore.songs;">
<ui:addTable name="musicList">
<c:forEach var="value" items="${result }">
<c:set scope="session" var="currentRow" value="${value }"></c:set>
<ui:addRow data="currentRow" scope="session">
</ui:addRow>
</c:forEach>
</ui:addTable>
</connect:Query>
</div>
<div style="height: 80px; background-color: #FFA500;">Footer
content</div>
我在网络浏览器上可以看到的html内容是
<table border="1" name=" musicList ">
<tr> <td>Tum hi ho</td>
<td>Arjit Singh</td>
<td>45</td></tr>
<tr> <td>Manjha</td>
<td>Amit Trivedi</td>
<td>30</td></tr>
<tr> <td>Ranjhanna</td>
<td>A.R Rehman</td>
<td>25</td></tr>
<tr> <td>Sawar Loon</td>
<td>Monali Thankur</td>
<td>20</td></tr>
</table>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<div style="height: 80px; background-color: #FFA500;">
<img src="/WEB-INF/resources/music_banner.png" ></img>
</div>
<div style="height: 450px;">
</div>
<div style="height: 80px; background-color: #FFA500;">Footer
content</div>
</body>
</html>
添加行标签.java
public class AddRowTag extends TagSupport {
// some getter, setter and other utility methods here.
@Override
public int doStartTag() throws JspException {
try {
System.out.println("AddRowTag--> doStartTag");
Row content = getDataToDisplay();
StringBuilder htmlContent = new StringBuilder();
htmlContent.append(startTableRow);
htmlContent.append(startTableData);
htmlContent.append(content.getTitle());
htmlContent.append(endableData);
htmlContent.append(startTableData);
htmlContent.append(content.getArtist());
htmlContent.append(endableData);
htmlContent.append(startTableData);
htmlContent.append(content.getPrice());
htmlContent.append(endableData);
htmlContent.append(endableRow);
System.out.println(htmlContent.toString());
pageContext.getResponse().getWriter().print(htmlContent);
} catch (IOException e) {
e.printStackTrace();
}
return SKIP_BODY;
}
}
总结问题:
- 其中(在转换代码(html 代码)的放置位置的上下文中)jsp 自定义标记代码放置在最终的 html 文件中。
- 我需要在我当前的 jsp 代码中修改的地方,如果我想在自定义标签的基础上更新中间的 div。
任何建议/解释将不胜感激。
最佳答案
标签不应直接写入响应。通过这样做,它绕过了 JspWriter,JspWriter 也写入响应但缓冲其输出。
替换
pageContext.getResponse().getWriter().print(htmlContent);
通过
pageContext.getOut().print(htmlContent);
关于java - Jsp 自定义标签以错误的顺序替换为 html 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20732398/