【问题标题】:How do I render a field in the gsp page from another domain?如何从另一个域呈现 gsp 页面中的字段?
【发布时间】:2021-08-09 00:26:13
【问题描述】:

这是我的场景:

Class Domain1 {
  static hasMany=[ tests : Domain2 ]
  static constraints = { tests(nullable: true) }
}

Class Domain2 {
  Double t1, String t2
  static constraints={
    t1(nullable:true
    t2(nullable:false,blank:false)
  }
}

我需要在 domain1 中显示 domain2 中的 t1 并具有编辑功能。

【问题讨论】:

  • 是否要在网页中呈现一个文本字段列表,其中一个用于d1.tests 中每个元素中的t1
  • 是的。这就是想法。我有点失落。我尝试像<g:textField domain = "Domain1' name="tests" value="${tests.t1}" /> 一样使用g:textField
  • 这更像是<g:textField name="t1" val="${domain1VarName.t1}"/>,其中domain1VarName 是指向Domain1 实例的模型变量的名称。
  • 我试过了。问题是它显示带有 id 的整个 Domain 值,例如 Domain1:10 表示域类和相应的 id。我想在这里显示t1 的确切值,如果没有值,我希望能够添加一个新值。
  • 这听起来不对。如果value 属性是${domain1VarName.t1} 并且domain1VarName 指向Domain1 的实例,那么将呈现该实例的值t1,而不是实体ID。可能是t1 的值恰好与id 相同,但tDomain2 中的Double,可以有任何值。

标签: grails groovy gsp


【解决方案1】:

我需要在 domain1 中显示 domain2 中的 t1 并具有编辑功能。

https://github.com/jeffbrown/samdomain查看项目。

grails-app/domain/samdomain/Domain1.groovy:

package samdomain

class Domain1 {
    static hasMany = [tests: Domain2]
}

grails-app/domain/samdomain/Domain2.groovy:

package samdomain

class Domain2 {
    Double t1
    String t2

    static constraints = {
        t1 nullable: true
    }
}

grails-app/controllers/samdomain/DemoController.groovy:

package samdomain

class DemoController {

    def index() {
        def d1 = new Domain1()
        d1.addToTests t1: 42, t2: 'Fourty Two'
        d1.addToTests t1: 2112, t2: 'Twenty One Twelve'

        [domainInstance: d1]
    }

    def update() {
        render "Updated values: ${params.t1Values}"
    }
}

grails-app/views/demo/index.gsp:

<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<head>
    <meta name="layout" content="main"/>
    <title>Simple Demo</title>
</head>

<body>

<g:form action="update" method="POST">
    <table>
    <g:each var="d2" in="${domainInstance.tests}">
        <tr>
            <td>${d2.t2}</td>
            <td><g:textField name="t1Values" value="${d2.t1}"/></td>
        </tr>
    </g:each>
    </table>
    <g:submitButton name="Update"/>
</g:form>
</body>
</html>

【讨论】:

  • 这很有帮助。在另一种方法中,是否可以从 domain1 的网页中创建一个新的 domain2 对象作为字段?
  • " 是否可以从 domain1 的网页中创建一个新的 domain2 对象作为字段?" - 确实。您可以在 gsp 中放置您喜欢的任何表单字段,然后使用它们在服务器上创建您喜欢的任何域对象。
  • 您介意提供一个使用上述场景中的 domain1 和 domain2 的示例吗?
猜你喜欢
  • 2015-09-20
  • 2010-10-13
  • 1970-01-01
  • 2011-09-20
  • 1970-01-01
  • 2021-05-03
  • 2012-07-15
  • 2010-11-30
  • 2021-11-06
相关资源
最近更新 更多