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}是另一种方式