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

Car*_*cum 3 grails

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

class Project {
    static hasMany = [prefixes: Prefix] 
}
Run Code Online (Sandbox Code Playgroud)

在项目show.gsp中使用<f:display bean="project" />前缀列表显示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>
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢,卡尔

Car*_*cum 6

我通过为我的常规属性创建默认的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>
Run Code Online (Sandbox Code Playgroud)

并且在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>
Run Code Online (Sandbox Code Playgroud)

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

<f:display bean="project" />
Run Code Online (Sandbox Code Playgroud)

<ol class="property-list">
    <f:display bean="project" property="number"/>
    <f:display bean="project" property="name"/>
    ...
    <f:display bean="project" property="prefixes"/>
</ol>
Run Code Online (Sandbox Code Playgroud)