Откуда в следующем фрагменте кода 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
  • Объекты домена, реконструированные с помощью инструментов Hibernate JBoss, помещенных в / src / main / groovy / com / mgs / *
  • Код CRUD от grails generate-all com.mgs.AwardTypes
  • MySQL 5.6
  • Windows 7 Профессиональная, Cygwin

Я бы подумал, что это будет примерно так:

class AwardTypesController {
       ...
       def edit(int id) {
            respond AwardTypes.get(id)
        }
        ...
    }
0
TechFanDan 17 Окт 2015 в 04:02

2 ответа

Лучший ответ

Это все благодаря привязке данных, Grails выполняет это автоматически.

0
TekiusFanatikus 30 Окт 2015 в 14:49

Вы должны добавить этот код в 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

0
Roman Romanovsky 17 Окт 2015 в 10:08