Grails中格式化字符串为项目符号及动态Div展示带符号内容的方法
嘿,我来帮你解决Grails里这两个列表展示的问题!分两种情况给你拆解:
1. 把普通字符串格式化为项目符号列表
如果你的原始字符串是用特定分隔符(比如逗号、换行)分隔的条目,你可以先把字符串拆成列表,再用Grails的<g:each>标签生成HTML列表。
步骤:
- 控制器层处理(推荐):先把字符串拆成List传到视图,这样逻辑和视图分离更清晰:
def yourAction() { // 示例原始字符串,用逗号分隔 def rawStr = "功能A, 功能B, 功能C" // 拆分并转成List,注意处理空元素 def itemList = rawStr.split(", ").findAll { it.trim() != "" } [items: itemList] }
- 视图层渲染:在GSP里用
<ul>和<g:each>生成列表:
<ul class="ds-results-detail-a"> <g:each in="${items}" var="item"> <li>${item}</li> </g:each> </ul>
如果想直接在GSP里处理字符串(不经过控制器),也可以这么写:
<ul class="ds-results-detail-a"> <g:each in="${rawStr.split(', ').findAll { it.trim() }}" var="item"> <li>${item}</li> </g:each> </ul>
2. 处理已包含•符号的字符串,转成列表展示
针对你给出的示例(a : "Uses •This is a test: •This is a test •..."),核心是把•作为分隔符提取出每个条目,再渲染成列表。
方法一:拆分字符串+过滤
先把字符串按•拆分,去掉开头的前缀(比如"Uses ")和空元素,再渲染:
<ul class="ds-results-detail-a"> <g:each in="${a.split('•').findAll { it.trim() }.drop(1)}" var="item"> <li>${item.trim()}</li> </g:each> </ul>
split('•'):把字符串按•分割成数组findAll { it.trim() }:过滤掉空白的条目drop(1):去掉第一个元素(也就是开头的"Uses "部分)
方法二:正则提取(更灵活,适配前缀不固定的情况)
如果前缀不是固定的"Uses ",用正则匹配所有•后面的内容会更靠谱:
<ul class="ds-results-detail-a"> <g:each in="${(a =~ /•(.*?)(?=•|$)/).collect { it[1].trim() }}" var="item"> <li>${item}</li> </g:each> </ul>
这个正则会匹配所有•后面、直到下一个•或字符串结尾的内容,自动忽略前面的前缀,直接提取每个列表项。
注意点:
- 如果你的字符串里是中文圆点
·,记得把代码里的•换成· - 如果需要保留原字符串里的特殊格式(比如冒号),直接渲染即可,Grails会自动转义HTML(如果不需要转义可以用
${raw(item)},但要注意XSS风险)
内容的提问来源于stack exchange,提问作者iron
相关产品推荐
相关产品推荐

