如何从另一个域呈现 gsp 页面中的字段?

Posted

技术标签:

【中文标题】如何从另一个域呈现 gsp 页面中的字段?【英文标题】:How do I render a field in the gsp page from another domain? 【发布时间】: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,可以有任何值。 【参考方案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 的示例吗?

以上是关于如何从另一个域呈现 gsp 页面中的字段?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Grails GSP 中保存复合字段值?

从 GSP 页面中的变量路径名在新窗口中打开 pdf 文件

如何将 GSP 呈现为字符串?

在 GSP 中打印时在变量中评估 Groovy/Grails 代码

如何从 grails 视图文件夹中的 create.gsp 表单中隐藏几个字段?

Primefaces 是不是能够从另一个域获取 jquery?