【问题标题】:JSTL Taglib Showing Hidden Parameters显示隐藏参数的 JSTL Taglib
【发布时间】:2014-05-29 17:09:01
【问题描述】:

我们在下面的 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>

请注意&lt;br /&gt;&lt;div...并非来自我们的代码,而是由JSTL出于某种原因生成的。

【问题讨论】:

  • 您是否检查过homeDesc.titlehomeDesc.experiencehomeDesc.description 中没有可能影响此的奇怪字符?另外,为什么要在隐藏字段中设置(可能很长)描述作为值?这让我对你目前的设计感到好奇。
  • 嗨 Luiggi,我们无法看到我们将收到的参数。你有什么建议可以在不使用脚本的情况下解决这个问题吗?
  • 使用 &lt;c:out&gt; 来处理这个问题。

标签: java jsp jstl struts


【解决方案1】:

您在该值中有大量引号,这使其与 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 发送到服务器是一个坏主意。您将不得不在服务器端再次验证它,因此您不妨将其完全留在后端。将其放入隐藏的输入中并将其发送回服务器可以让用户有机会更改它。

【讨论】:

  • 回到恐龙时代解决问题?认真的吗?
  • @Luiggi Mendoza,你是说字符串替换是恐龙时代吗?我提到过 scriptlet 只是为了快速确认它是否有效。
  • 不,scriptlet 来自恐龙时代。使用&lt;c:out value="${homeDesc.category}" /&gt; 和其他人会更好。
  • @developerwjk 在控制器中渲染 HTML 内容也是一种恐龙方法。
  • 那么,控制器中的替代品是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多