我一直试图获取逗号分隔字符串的内容,如
"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'属性的值,就像前三个被渲染一样?
提前致谢。
答案 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>
这将确保拆分字符串是一个连续的字符串,但输出的格式与原来一样(带空格)。