You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:49:48