request.getAttribute()在jsp中没有显示正确的输出

时间:2015-11-16 11:01:31

标签: java jsp servlets

我通过request.setAttribute从servlet向jsp页面发送html字符串,但是当我尝试在jsp上获取它时,它在视图中无法正确显示。

的servlet:

String sampleHtml = ""
    + "<table class=\"table table-bordered\">"
        + "<thead>"
                + "<tr>"
                    + "<td>Data</td>"
                    + "<td>More Data</td>"
                + "</tr>"
        + "</thead>"
        + "<tbody>"
            + "<tr>"
                + "<td>Macdonal</td>"
                + "<td>David</td>"
            + "</tr>"
        + "</tbody>"
    + "</table>";           
}

request.setAttribute("userRoles", sampleHtml);

JSP:

<p>
    <label>Set Roles</label>
    <span class="field">
        <%=request.getAttribute("userRoles") %>
    </span>
</p>

当我重新加载我的视图时,结果变得非常错误。表格超出span标记。我附上图片,明确错误! enter image description here

3 个答案:

答案 0 :(得分:1)

默认情况下,

span是内联元素。它不能包含块元素。因此,您无法向其添加表格。考虑将span改为div。

来自span docs

  

HTML元素是用于表示内容的通用内联容器,它本身并不代表任何内容。

请不要在servlet中编写HTML。使用JSTL或JS。

答案 1 :(得分:0)

从cotroller发送HTML代码不是一个好习惯。准备控制器中的数据并将其发送到您的视图,例如:

request.setAttribute("userRoles", roles);

然后在jsp绘制表中使用html和jstl foreach:

<table>
  <thead>
    <tr>
      <td>Data</td>
      <td>More Data</td>
    </tr>
  </thead>
  <tbody>
     <c:forEach items="userRoles" var="role">
        <tr>
            <td><c:out value="${role.data}"/></td>
            <td><c:out value="${role.moreData}"/></td>
        </td> 
     </c:foreach>
  </tbody>
</table>

别忘了加入你的jsp:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

并添加到您的pom.xml:

<dependency>
    <groupId>javax.servlet.jsp.jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

这是更灵活的方式,因为您的处理逻辑和视图准备是分离的,您可以替换表到列表(例如),添加样式而无需任何控制器逻辑更改

答案 2 :(得分:0)

将其放在div标记

<div class="field">
    <%=request.getAttribute("userRoles") %>
</div>