Java 停止将带有空格的JSTL函数输出呈现为不同的属性
我一直在尝试获取逗号分隔字符串的内容,如Java 停止将带有空格的JSTL函数输出呈现为不同的属性,java,jsp,jstl,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(
"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>
RAVI, PRASHANT, ANKIT, PANKAJ, "Nilesh Kumar Mishra", "Anoop Kumar"
<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>
${name}
但是在呈现页面之后,我注意到如果${name}的输出包含任何空格,则空格后面的单词将被呈现为option标记内的属性
<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>
拉维
普拉尚特
安基特
潘卡吉
尼莱什·库马尔·米什拉
阿努普·库马尔
我试着寻找解决办法,结果发现答案是肯定的。但提供的解决方案是针对PHP的,而且我无法在JSP中找到与htmlspecialchars等效的解决方案
有人能帮我避免那些不想要的属性,而是在选项标记中将整个字符串作为“value”属性的值,就像前三个属性一样
提前感谢。我打赌当数据有空格时,逗号分隔的字符串中会有引号,如下所示:
<select class="style1" id="id" placeholder="sample placeholder" >
<c:forEach var="name" items="${fn:split(names, ',')}">
<option value="${name}">${name}</option>
</c:forEach>
</select>
RAVI, PRASHANT, ANKIT, PANKAJ, "Nilesh Kumar Mishra", "Anoop Kumar"
<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>
然后,当foreach运行时,引号会提前终止value属性。所以你最终得到了这个
<option value=""nilesh kumar mishra"" ...
鉴于您的情况,这里可能是最简单的解决方法。。。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>
${name}
这将确保分割的字符串是一个连续字符串,但输出的格式与原始格式相同(带有空格)。尝试此:${name}并查看转义XML特殊字符时会发生什么情况,一个类似的JSTL函数可能假定为${fn:escapeXml(name)}
或在输出时,
是隐式的(即默认情况下,escapeXml
设置为true),但在这种情况下这不太可能有帮助。names
包含什么,当然是逗号分隔的字符串列表?@Tiny,是的,names
包含逗号分隔的字符串列表,如下所示:“RAVI、PRASHANT、ANKIT、PANKAJ、Nilesh Kumar Mishra、Anoop Kumar”
很抱歉没有将该部分包含在问题本身中,但首先我们在控制器中声明字符串,如下所示:private final string name=“RAVI、PRASHANT、ANKIT、PANKAJ、Nilesh Kumar Mishra、Anoop Kumar”;然后在JSP选择的模型中设置它,如下所示:model.addAttribute(“name”,names);很抱歉回来晚了,但是这个解决方案非常有效…非常感谢!!!凉的如果对您有效,您可以单击此答案上的复选框,将其标记为已解决。