【问题标题】:Trying to determine the origin of this method's parameter试图确定此方法参数的来源
【发布时间】:2015-10-17 01:02:10
【问题描述】:

在下面的 sn-p 中,awardTypes 来自哪里?有问题的 URL:http://localhost:8080/awardTypes/edit/1。我需要帮助理解请求流程。

/mgs/grails-app/controllers/com/mgs/AwardTypesController.groovy

class AwardTypesController {
   ...
   def edit(AwardTypes awardTypes) {
        respond awardTypes
    }
    ...
}

/mgs/grails-app/conf/hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <mapping resource="AwardTypes.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

/mgs/grails-app/conf/AwardTypes.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- Generated 14-Oct-2015 10:13:15 PM by Hibernate Tools 4.3.1.Final -->
<hibernate-mapping>
    <class name="com.mgs.AwardTypes" table="award_types" catalog="mgs" optimistic-lock="version">
        <id name="id" type="java.lang.Byte">
            <column name="id" />
            <generator class="identity" />
        </id>
        <property name="name" type="string">
            <column name="name" length="250" not-null="true" />
        </property>
        <property name="image" type="string">
            <column name="image" length="500" />
        </property>
        <property name="created" type="timestamp">
            <column name="created" length="19" />
        </property>
        <property name="modified" type="timestamp">
            <column name="modified" length="19" />
        </property>
        <set name="awardses" table="awards" inverse="true" lazy="true" fetch="select">
            <key>
                <column name="award_type_id" not-null="true" />
            </key>
            <one-to-many class="com.mgs.Awards" />
        </set>
    </class>
</hibernate-mapping>

配置:

  • Grails 3.0.9
  • 从 /src/main/groovy/com/mgs/* 中的 JBoss 的 Hibernate 工具反向工程的域对象
  • 来自grails generate-all com.mgs.AwardTypes的CRUD代码
  • MySQL 5.6
  • Windows 7 专业版,Cygwin

我原以为会是这样的:

class AwardTypesController {
       ...
       def edit(int id) {
            respond AwardTypes.get(id)
        }
        ...
    }

【问题讨论】:

  • 我相信this 会回答你的问题。

标签: mysql hibernate grails groovy


【解决方案1】:

您必须在 UrlMappings.groovy 中添加此代码:

class UrlMappings {
     static mappings = {
         .....
      "/awardTypes/edit/$id"(controller: "awardTypes", action: "edit")
     }
}

在您的控制器 1.) 中:

def edit() {
    AwardTypes.get(params.id)
}

 def edit(Long id) {
    AwardTypes.get(id)
}

最好使用 Long 而不是 int,因为在 grails 中它是 id 的默认类型。

*另外,我可以显示我的UrlMapping:

class UrlMappings {

static mappings = {
    ...
    "/$controller/$action?/$id?(.$format)?" {
        constraints {
            // apply constraints here
        }
    }
    ....
   }
}

另外,阅读更多:https://grails.github.io/grails-doc/latest/ref/Plug-ins/URL%20mappings.html

【讨论】:

    【解决方案2】:

    这一切都归功于Data Binding,它是由 Grails 自动完成的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-08
      • 2019-01-11
      • 1970-01-01
      • 2019-01-14
      • 2019-08-23
      • 2015-02-08
      相关资源
      最近更新 更多