JSTL Taglib显示隐藏参数

时间:2014-05-29 17:09:02

标签: java jsp jstl struts

我们在下面遇到JSTL Taglib的一些问题,因为即使输入类型被声明为“隐藏”,有时也会在浏览器中显示

<c:forEach var="homeDesc" items="${homeDescBean.homeCategories}">
    <input type="hidden" id='${homeDesc.category}'value='${homeDesc.title}_${homeDesc.experience}_${homeDesc.description}' />
</c:forEach>

查看我们看到的生成的HTML:

<input type="hidden" id="O2" value="VALUE &nbsp;16 mq.">
<input type="hidden" id="S3" value="VALUE_VALUE_<br /><div xmlns=" http:="" www.w3.org="" 1999="" xhtml'="">
VALUE THAT SHOULD BE HIDDEN</div>

请注意<br /><div...不是来自我们的代码,而是由JSTL因某种原因生成的。

1 个答案:

答案 0 :(得分:0)

你在该值中有一大堆引号,这使得它与value =“”周围的引号相冲突。您需要用HTML实体替换引号。您可以在控制器中进行替换,设置这是请求属性,并使用JSTL。

在控制器中:

String str = "VALUE_VALUE_<br /><div xmlns=\" http:=\"\" www.w3.org=\"\" 1999=\"\" xhtml'=\"\">\nVALUE THAT SHOULD BE HIDDEN</div>";
str = str.replaceAll("\"", "&quot;");
request.setAttribute("htmlsnippet", str);
request.getRequestDispatcher("/WEB-INF/show.jsp").forward(request, response);

在JSP中:

<c:out value="${htmlsnippet}" />

编辑:但是在隐藏输入中将硬编码的HTML / XML发送到服务器是一个坏主意。您将不得不在服务器端再次验证它,因此您可能完全将其留在后端。将它放入隐藏的输入并将其发送回服务器后,用户就有机会对其进行更改。