带有字段插件 2.1.0-SNAPSHOT 的 Grails 3 "show" 视图

Grails 3 "show" view with Fields plugin 2.1.0-SNAPSHOT

卡在 Grails 3.1.5 中的一个小问题:显示域对象的字段,排除其中一个,包括瞬态 属性。是的,这是我使用以前版本多年后的第一个 Grails 3 项目。

生成的show.gsp包含

<f:display bean="rfaPdffile"/>

这将包括一个可能包含兆字节 XML 的字段。它不应该以交互方式显示。 display: false 约束不再出现在文档中,似乎被忽略了。

接下来我尝试明确命名字段:

<f:with bean="rfaPdffile">
  <f:display property='fileName'/>
  <f:display property='pageCount'/>
  ...
</f:with>

这个版本令人惊讶地显示了没有任何标记的值。将 display 更改为 field,

<f:with bean="rfaPdffile">
  <f:field property='fileName'/>
  <f:field property='pageCount'/>
  ...
</f:with>

类似的作品,但显示可编辑的值。 f:all.

也是

此外,我尝试将其他属性添加到 f:displayproperties(如 f:table),except(如 f:all)。我顺便注意到这两个属性出于相似的目的具有不同的语法。

在 Field 插件文档中,我的用例被明确提及为设计目标。我一定是漏掉了一些明显的东西。

我的目标是快速拼凑出一个原型 gui,细节推迟到以后。非常感谢提供线索

如果我没理解错的话,您想将所有 bean 属性都包含在 gsp 中,但是带有 "megabytes of XML" 的属性不应该显示给用户吗? 如果是这种情况,您可以这样做:

f:with bean="beanName" 
f:field property="firstPropertyName"
f:field property="secondPropertyName"

而您不想显示的那个:

g:hiddenField name="propertyName" value="${beanName.propertyName?}"
f:with

所以将所有属性列为 f:fieldf:display 并将您不想显示的属性放在 g:hiddenField Grails 标记中 你也可以试试:

f:field property="propertyName" 
widget-hidden="true"

但在这种情况下标签并未隐藏。 希望对你有帮助

我自己的回答:"use the force, read the source"。 f:display 标签有两个相当明显的错误。我会尽快提交拉取请求。

撇开错误不谈,文档没有提到插件可能会从域中获取 "scaffold" 静态 属性,如果有的话。它的值应该是一张地图。它的 "exclude" 键可以定义要排除的 属性 名称列表(字符串列表)。这可能已经适用于 "f:all" 标签; "f:display" 标签需要错误修正。

我的主观印象是字段插件处于紧要关头。它与 Grails 架构交织在一起,使其对 Grails 内部结构的变化很敏感。标准脚手架插件也需要它,使其非常明显。因此,它需要维护者的持续关注,这是一个不容羡慕的职位。即使是现在,默认约束的约定似乎在 Grails 3.0.9 和 3.1.7 之间的某处发生了变化。

字段插件的性能对使用它的应用程序中的插件总数很敏感。它动态搜索所有插件的模板。

对于愿望清单,我更喜欢更严格的标签命名。主要标签应该是动词。有两个主要操作,显示和编辑。对于每个操作,有两个主要变体,单个 bean 或多个 bean。

我的回答是目前(2 March 2017)没有答案。我在网上到处搜索。对于索引(列表)以及创建和编辑视图,字段插件工作得很好。某个字段可以很容易地从创建和编辑视图中排除,从列表视图中相对容易地排除(通过列出那些应该显示的字段),而且我无法从显示视图中找到。这是一个如此普遍的需求,人们会怀疑它很快就会得到解决。此外,还可以在显示视图中轻松显示派生值,例如发票的 'total'。可以通过添加一个有序列表来做到这一点,其中一个列表项显示生成的有序值列表下方的值,但这是一种 hack。

在某些方面,旧方法更容易。是的,它生成了长视图,但它们是生成的并且不必由程序员完成 - 只是在这里和那里自定义触摸。