Java request.getAttribute()在jsp中未显示正确的输出
我通过Java request.getAttribute()在jsp中未显示正确的输出,java,jsp,servlets,Java,Jsp,Servlets,我通过request.setAttribute将html字符串从servlet发送到jsp页面,但当我尝试在jsp上获取它时,它在视图中没有正确显示 servlet: String sampleHtml = "" + "<table class=\"table table-bordered\">" + "<thead>" + "<tr>" + "<td>
request.setAttribute
将html字符串从servlet发送到jsp页面,但当我尝试在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);
String sampleHtml=“”
+ ""
+ ""
+ ""
+“数据”
+“更多数据”
+ ""
+ ""
+ ""
+ ""
+“麦克唐纳”
+“大卫”
+ ""
+ ""
+ "";
}
setAttribute(“userRoles”,sampleHtml);
jsp:
设定角色
当我重新加载视图时,结果就完全错误了。表超出了span
标记的范围。我已附上图片,让清楚的想法,什么是错的!
默认情况下,span是一个内联元素。它不能包含块元素。因此,不能向其中添加表。考虑改变跨度为div.p/p> 从 HTML元素是一个通用的内联容器,用于语法内容,它本身并不表示任何内容
请不要在servlet中编写HTML。使用JSTL或JS。从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>
javax.servlet.jsp.jstl
jstl
1.2
这是一种更灵活的方式,因为您的处理逻辑和视图准备是解耦的,所以您可以将表替换为列表(例如),添加样式而无需任何控制器逻辑更改将其放在
div
标记上
<div class="field">
<%=request.getAttribute("userRoles") %>
</div>
请检查源代码中的输出。“元素”面板对损坏的HTML代码进行了一些修复,因此您不会看到原始代码。在这种情况下,Chrome可能会告诉您,table
insidespan
是不允许的,或者页面中有一些其他损坏的html。检查源(CTRL+U)。事实上,如果您尝试验证您的页面,您将看到table
在span
中是不允许的。这很有效&特别感谢span文档
+关于使用JSTL和JS的建议
<div class="field">
<%=request.getAttribute("userRoles") %>
</div>