Tags 如何在play-1.x中定义“separator”标记而不修改play';s源代码

Tags 如何在play-1.x中定义“separator”标记而不修改play';s源代码,tags,playframework-1.x,Tags,Playframework 1.x,我想定义一个标记分隔符标记,它在列表标记中可以在项目之间添加分隔符 示例代码是: List<String> users = new ArrayList<String>(); users.add("Jeff"); users.add("Mike"); #{list users, as: 'user'} #{separator ' + ' /} <span>${user}</span> #{/list} 生成的html代码将是: #

我想定义一个标记
分隔符
标记,它在
列表
标记中可以在项目之间添加分隔符

示例代码是:

List<String> users = new ArrayList<String>();
users.add("Jeff");
users.add("Mike");

#{list users, as: 'user'}
    #{separator ' + ' /}
    <span>${user}</span>
#{/list}
生成的html代码将是:

#{list users, as: 'user'}
    ${user_isFirst ? '' : ' + '}
    <span>${user}</span>
#{/list}
<span>Jeff</span> + <span>Mike</span>

但问题是,在这种情况下,我无法获得
列表中定义的
的值(即
用户
)。我认为您将在args映射中看到范围内的所有变量。这是从记忆中得到的——所以,如果不是的话,很抱歉

也就是说,我认为如果您复制#{list}的Java代码并添加一个新参数,比如

#{list users, as: 'user', separator: '+' }
并处理其中的逻辑。从设计的角度来看,它似乎也有点干净——如果它是一个分隔符,为什么可以将它放在代码中任何你喜欢的地方(为什么不放两次呢!)


最后一个选项是查看Groovy或Java集合操作符

您可以像这样在groovy中创建自定义列表标记

#{list items:_arg, as:'tmp'}

    %{
            attrs = [:]
            attrs.put(_as, tmp)
    }%

    #{ifnot tmp_isFirst}${_sep}#{/ifnot}
    #{doBody vars:attrs /}

#{/list}
#{myList users, as:'user', sep:','}
    ${user}
#{/myList}
像这样使用它

#{list items:_arg, as:'tmp'}

    %{
            attrs = [:]
            attrs.put(_as, tmp)
    }%

    #{ifnot tmp_isFirst}${_sep}#{/ifnot}
    #{doBody vars:attrs /}

#{/list}
#{myList users, as:'user', sep:','}
    ${user}
#{/myList}

list
标记位于“GroovyInlineTags”文件中,如果不修改源代码,就无法添加
分隔符
:seb的答案很好-我同意。使用Play.tag特性实现自己的#{list}是另一种方式