java - Jsp 自定义标签以错误的顺序替换为 html 内容

标签 java html jsp custom-tags

我在上节课中了解到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;
}

}

总结问题:

  1. 其中(在转换代码(html 代码)的放置位置的上下文中)jsp 自定义标记代码放置在最终的 html 文件中。
  2. 我需要在我当前的 jsp 代码中修改的地方,如果我想在自定义标签的基础上更新中间的 div。

任何建议/解释将不胜感激。

最佳答案

标签不应直接写入响应。通过这样做,它绕过了 JspWriter,JspWriter 也写入响应但缓冲其输出。

替换

pageContext.getResponse().getWriter().print(htmlContent);

通过

pageContext.getOut().print(htmlContent);

关于java - Jsp 自定义标签以错误的顺序替换为 html 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20732398/

相关文章:

java - Servlet : Singleton, 单线程或多实例多线程

从 Oracle 数据库获取 float 时出现 Java 精度问题 - 无法正确舍入

java - 多个字段上的对象列表分组 Java 8

java - 是否可以使用不同版本的 java 运行 jar 文件?

jquery - 使用 CSS 动画围绕地球旋转点

javascript - 是否可以使用 HTML 拖放文件上传,但不使用 AJAX/XHR?

java - 在 spring mvc 中,如何使用@RequestMapping 链接到另一个 jsp?

java - 从 arraylist 转换为二维数组(返回引用)

java - 在java中发送电子邮件,无需gmail身份验证

html - 将子菜单与其父菜单对齐