我有复杂的Java Object List包含一个字节数组作为从DB检索的图像格式。 POJO中有字节数组格式的文件名,文件类型和文件数据等。字节数组的长度约为20k。我可以通过javascript在JSP中显示它:
for(var i in data){
var imgelement = document.createElement("IMG");
imgelement.id=data[i].fileId;
imgelement.src = "data:"+data[i].fileType+";base64,"+data[i].thumbnail;
}
这将正确显示IMG。
但是当我尝试通过使用jstl foreach函数将其放入我的普通JSP中来迭代我的POJO列表时,我从未得到我的图像显示。
<c:forEach items="${searchResult}" var="current" varStatus="i">
<c:choose>
<c:when test="${(i.count) % 2 == 0}">
<c:set var="rowclass" value="rowtwo" />
</c:when>
<c:otherwise>
<c:set var="rowclass" value="rowone" />
</c:otherwise>
</c:choose>
<tr class="${rowclass}">
<td nowrap="nowrap" class="tabletd"> <img src="data:${current.miniFile.fileTyle};base64,<c:out value='${current.miniFile.thumbnail}'/>"/> </td>
<td nowrap="nowrap" class="tabletd"> ${current.site.siteName} </td>
<td nowrap="nowrap" class="tabletd"> ${current.distance} </td>
<td nowrap="nowrap" class="tabletd"> ${current.site.siteAccessby} </td>
<td nowrap="nowrap" class="tabletd"> ${current.site.siteAddressFormated} </td>
</tr>
</c:forEach>
在我的html页面中有输出显示,src为字节数组:
<img src="data:image/jpeg;base64,[B@2e29c573">
有什么想法吗?建议请!
修改
我试图通过jsp:useBean使用Java 8 Java.util.Base64函数来进行字节数组转换,但它仍然不适用于我。
其他问题,我如何使用jsp:useBean来做呢?因为变量是jstl变量。即我需要使用jsp:usedBean函数来处理jstl局部变量。
代码如:
<tr class="${rowclass}">
<jsp:useBean id="obj" class="java.util.Base64"/>
<jsp:setProperty name="imageStr" property="String" value="${current.miniFile.thumbnail}"/>
<td nowrap="nowrap" class="tabletd"> <img src="data:${current.miniFile.fileTyle};base64,<c:out value='${current.miniFile.thumbnail}'/>"/> </td>
我没有使用jsp:useBean处理jstl变量的经验,有这样的经验,请分享给我!理解!
再次编辑
有一个使用jsp:useBean
进行日期类型收费的示例答案 0 :(得分:0)
[B@2e29c573
表示您只是打印出一个字节数组。您必须将原始字节数组转换为base64编码的字符串。您可以使用Base64.encodeBase64String
中commons-codec之类的内容来执行此操作
答案 1 :(得分:0)
不知何故,我从来没有在我的JSP中使用它。似乎在jstl forEach迭代器中有一些难以处理的变量。当我试图通过调用java方法来处理它时,JSP解析器总是抛出解析异常。
最终,我必须更改服务器端代码以更新我的POJO以支持Base64编码字符串而不是字节数组。
我使用Java 8 Base64来做到这一点。它工作正常。
希望在我的情况下这会帮助其他人。