如何更改 grails 在 f:all 中放入下拉列表的内容

How to change what grails puts into dropdown in f:all

我有一个非常简单的项目,用户有账户,账户有交易。

我使用 grails generate-all Transaction 生成了视图、控制器和服务。

事务域对象如下所示:

class Transaction {
    Account account
    BigDecimal debit = 0
    BigDecimal credit = 0
    static constraints = {
    }
}

控制器只有这个:

def create() {
    respond new Transaction(params)
}

即仅发送新交易(不是帐户列表)。

但是,创建 UI 有一个系统中所有帐户的下拉列表(不仅仅是这个用户):

问题是,有没有办法"fix"只显示用户帐户?如果没有,我总是可以手动编写每个字段硬编码的创建视图。只是想知道是否有很酷的 Grails 方法来做到这一点。

https://github.com/nutmix/grails-dropdow-air

这是一个棘手的问题,不是吗?在研究了一段时间这个问题的解决方案后,我发现我们可以按照下面的描述来完成这个需求。

transactioncreate 视图中,自定义一些数据呈现方式:

<g:form resource="${this.transaction}" method="POST">
    <fieldset class="form">
         <f:field bean="transaction" property="account" wrapper="transaction/account"/>
         <f:all bean="transaction" except="account"/>
    </fieldset>
...
            </g:form>

其中 wrapper 是我们放置 _wrapper.gsp 的目录(即路径)。阅读有关 Loading Templates Conventionally Example 部分的更多信息,了解如何以及在何处定义自定义包装器、模板和小部件。为了解决您的问题,_wrapper.gsp 有以下代码:

<%@ page import="dropdown.Account" %>
<%
    def values = dropdown.Account.all.collect {it.currencyIso}.unique(true)
    //println values
%>
<div class="fieldcontain required">
    <label for="account">Account <span class="required-indicator">*</span></label>
    <g:select name="account" from="${values}"
              value="${transaction?.account}"/>
</div>

_wrapper.gsp的位置是grails-app/views/_fields/transaction/account/_wrapper.gsp

结果如下图所示。

P/S:当我遇到关于f:table时,我就有了这个想法。