2015-11-16 289 views
3

我通過request.setAttribute從servlet發送html字符串到jsp頁面,但是當我嘗試獲取它時jsp它無法在視圖中正確顯示。request.getAttribute()在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

+1

請檢查源代碼中的輸出。元素面板修復了破碎的HTML代碼,所以您不會看到原始代碼。在這種情況下,Chrome可能會告訴你'span'裏面的'table'是不允許的,或者頁面中有一些其他的壞html。檢查源(CTRL + U)。事實上,如果你試圖驗證你的頁面,你會發現'span'裏面不允許使用'table'。 – BackSlash

回答

1

span默認情況下是內聯元素。它不能包含塊元素。因此你不能添加一個表。考慮將跨度更改爲div。

span docs

的HTML元素是段落式內容,這本身並沒有表示任何一個通用的內嵌容器。

請不要在servlet中編寫HTML。使用JSTL或JS。

+0

這工作&特別感謝*'span docs' * +使用JSTL和JS的建議 – mumair

0

發送HTML代碼以查看cotroller並不是一個好習慣。使用HTML和JSTL的foreach

request.setAttribute("userRoles", roles); 

然後在JSP中繪製表格:在您的控制器準備數據並將其發送到您的視圖,例如

<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> 

它更靈活的方式,因爲你的處理邏輯和觀點的準備是分離的,可以更換表列出(例如),無需任何控制器邏輯添加樣式改變

0

把它放在一個div標籤

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