如何更改f:all中grails放入下拉菜单的内容

时间:2019-03-08 22:37:29

标签: grails3

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

我使用grails生成所有事务生成了视图,控制器和服务。

交易域对象如下:

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

控制器只有这样:

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

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

但是,创建用户界面具有系统中所有帐户的下拉列表(不仅限于该用户):

enter image description here

问题是,有没有一种方法可以“修复”仅显示用户帐户?如果没有,我总是可以用硬编码的每个字段手动编写创建视图。只是想知道是否有很酷的方法。

请参见https://github.com/nutmix/grails-dropdow-air

1 个答案:

答案 0 :(得分:1)

这是一个棘手的问题,不是吗?在研究了这个问题的解决方案一段时间之后,我发现我们可以通过执行以下操作来满足需要。

create的{​​{1}}视图中,自定义一些如何呈现数据的方法:

transaction

其中<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的目录(即路径)。在Loading Templates Conventionally Example部分中了解更多信息,以了解如何以及在何处定义自定义包装,模板和小部件。为解决您的问题,_wrapper.gsp具有以下代码:

_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

结果如下图所示。 enter image description here

P / S:当我遇到关于grails-app/views/_fields/transaction/account/_wrapper.gsp的{​​{3}}时,我有了这个想法。