Grails 3 Fields Plugin - 使用f:display tag显示属性值代替hasMany Object:id

时间:2015-10-09 02:10:15

标签: grails

我有一个名为Project的域,其中包含hasMany关系,如

class Project {
    static hasMany = [prefixes: Prefix] 
}

在使用<f:display bean="project" />的项目show.gsp中,前缀列表显示id,如com.example.Prefix:1

我希望通过将前缀的两个属性(例如'number'和'name'连接在一起,用一个连字符)替换为更有意义的东西。在没有Fields插件的Grails 2中,我会做这样的事情:

<ol>
...
  <li class="fieldcontain">
  <span id="prefixes-label" class="property-label">
  <g:message code="prefixes.label" default="Prefixes" /></span>

  <g:each in="${project.prefixes}" var="p">
    <span class="property-value" aria-labelledby="prefixes-label">
    <g:link controller="prefix" action="show" id="${p.id}">${p.number} - ${p.name}</g:link></span>
   </g:each>
  </li>
...
</ol>

我尝试用上面的代码创建一个grails-app / views / project / show / _displayWrapper.gsp,除了用'bean'替换'project'和show.gsp中的<f:display bean="project">,但我仍然有默认页面。

如何使用<f:display bean="project">样式标记来实现此目的?

谢谢, 卡尔

1 个答案:

答案 0 :(得分:5)

我通过为常规属性创建默认views / project / show / _displayWrapper.gsp来实现它:

<li class="fieldcontain">
    <span id="${label}" class="${label}"><g:message code="${label}" default="${label}" /></span>
    <span class="property-value" aria-labelledby="${label}"><g:fieldValue bean="${project}" field="${property}"/></span>
</li>

在views / project / show / prefixes / _displayWrapper.gsp中我的hasMany前缀的特定前缀

<li class="fieldcontain">
    <span id="${label}" class="${label}"><g:message code="${label}" default="${label}" /></span>
    <g:each in="${value}" var="p">
        <span class="property-value" aria-labelledby="${label}"><g:link controller="prefix" action="show" id="${p.id}">${p.number} - ${p.name}</g:link></span>
    </g:each>
</li>

然后在我的show.gsp中我替换了

<f:display bean="project" />

使用

<ol class="property-list">
    <f:display bean="project" property="number"/>
    <f:display bean="project" property="name"/>
    ...
    <f:display bean="project" property="prefixes"/>
</ol>