JSP显示来自Java对象

时间:2015-08-06 06:12:08

标签: java image jsp bytearray

我有复杂的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}'/>"/> &nbsp;</td>
        <td nowrap="nowrap" class="tabletd"> ${current.site.siteName} &nbsp;</td>
        <td nowrap="nowrap" class="tabletd"> ${current.distance} &nbsp;</td>
        <td nowrap="nowrap" class="tabletd"> ${current.site.siteAccessby} &nbsp;</td>
        <td nowrap="nowrap" class="tabletd"> ${current.site.siteAddressFormated} &nbsp;</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}'/>"/> &nbsp;</td>

我没有使用jsp:useBean处理jstl变量的经验,有这样的经验,请分享给我!理解!

再次编辑

有一个使用jsp:useBean

进行日期类型收费的示例

2 个答案:

答案 0 :(得分:0)

[B@2e29c573表示您只是打印出一个字节数组。您必须将原始字节数组转换为base64编码的字符串。您可以使用Base64.encodeBase64Stringcommons-codec之类的内容来执行此操作

答案 1 :(得分:0)

不知何故,我从来没有在我的JSP中使用它。似乎在jstl forEach迭代器中有一些难以处理的变量。当我试图通过调用java方法来处理它时,JSP解析器总是抛出解析异常。

最终,我必须更改服务器端代码以更新我的POJO以支持Base64编码字符串而不是字节数组。

我使用Java 8 Base64来做到这一点。它工作正常。

希望在我的情况下这会帮助其他人。