停止使用空格的JSTL函数输出呈现为不同的属性

时间:2015-04-14 18:43:04

标签: java jsp jstl

我一直试图获取逗号分隔字符串的内容,如

"RAVI, PRASHANT, ANKIT, PANKAJ, Nilesh Kumar Mishra, Anoop Kumar"

此列表中的每个元素都需要显示在JSP页面的下拉菜单中。执行此操作的JSP代码如下所示:

<select class="style1" id="id" placeholder="sample placeholder" >
    <c:forEach var="name" items="${fn:split(names, ',')}">
        <option value="${name}">${name}</option>
    </c:forEach>
</select>

但是在页面呈现之后我注意到如果$ {name}的输出包含任何空格,那么空格后面的单词将被呈现为选项标记内的属性。

<select class="style1" id="id" placeholder="sample placeholder" >
    <option value="RAVI">RAVI</option>
    <option value="PRASHANT">PRASHANT</option>
    <option value="ANKIT">ANKIT</option>
    <option value="PANKAJ">PANKAJ</option>
    <option value="Nilesh" kumar="" mishra="">Nilesh Kumar Mishra</option>
    <option value="Anoop" kumar="">Anoop Kumar</option>
</select>

我尝试了一些搜索解决方案并遇到了SO link。但是提供的解决方案适用于PHP,而且我无法在JSP中找到 htmlspecialchars 的等价物。

任何人都可以帮助我避免那些非预期的属性,而是将整个字符串作为选项标记中'value'属性的值,就像前三个被渲染一样?

提前致谢。

2 个答案:

答案 0 :(得分:0)

我敢打赌,当数据有空格时,你的逗号分隔字符串会有引号,如下所示:

RAVI, PRASHANT, ANKIT, PANKAJ, "Nilesh Kumar Mishra", "Anoop Kumar"

然后当foreach运行时,引号会过早地终止 value 属性。所以你最终得到了......

<option value=""nilesh kumar mishra"" ...

而不是......

<option value="nilesh kumar mishra" ...

浏览器最终将每个字符串解释为属性,而不是 value 属性的数据。所以你需要摆脱这样的引号:

<select class="style1" id="id" placeholder="sample placeholder" >
    <c:forEach var="name" items="${fn:split(names, ',')}">
        <option value="${fn:replace(name, '"', '')}">${name}</option>
    </c:forEach>
</select>

答案 1 :(得分:0)

根据你的情况,这里可能是处理它的最简单方法... a)用| s替换所有空格,b)拆分字符串,c)将| s替换回空格。这是怎么做的......

<select class="style1" id="id" placeholder="sample placeholder" >
    <c:forEach var="name" items="${fn:split(fn:replace(names, ' ', '|'), ',')}">
        <option value="${fn:replace(name, '|', ' ')}">${name}</option>
    </c:forEach>
</select>

这将确保拆分字符串是一个连续的字符串,但输出的格式与原来一样(带空格)。