如何更改 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 方法来做到这一点。
这是一个棘手的问题,不是吗?在研究了一段时间这个问题的解决方案后,我发现我们可以按照下面的描述来完成这个需求。
在 transaction
的 create
视图中,自定义一些数据呈现方式:
<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
的时,我就有了这个想法。
我有一个非常简单的项目,用户有账户,账户有交易。
我使用 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 方法来做到这一点。
这是一个棘手的问题,不是吗?在研究了一段时间这个问题的解决方案后,我发现我们可以按照下面的描述来完成这个需求。
在 transaction
的 create
视图中,自定义一些数据呈现方式:
<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
的