Могу ли я сделать это в Grails 1: динамически создавать форму ввода данных - PullRequest
0 голосов
/ 14 июня 2009

Я планирую использовать Grails для моего текущего проекта. У меня есть пара требований, которые я надеюсь выполнить в Grails.

Во-первых, у меня есть следующая таблица базы данных:

TagType
---------
tag_type_id
tag_type


Sample Data: TagType
--------------------
1,title
2,author

На основании этих данных мне нужно создать форму ввода данных, которая сохранит свои данные в другой таблице.

Плитка _ _ _ _ _ _ _ _ _ _ _
Автор _ _ _ _ _ _ _ _ _ _ _

Сохранить Отмена

Могу ли я сделать это в Grails? Можете ли вы указать мне правильное направление?

Спасибо!

Подробнее

Я создаю систему цифровой библиотеки, которая поддерживает OIA-PMH, которая является стандартом для обмена метаданными о документах. Стандарт гласит, что каждый элемент является необязательным и повторяемым. Для поддержки этого требования у меня есть следующий дизайн базы данных.

Мне нужно сгенерировать пользовательский графический интерфейс (форма ввода данных), основанный прежде всего на содержимом таблицы TagType (см. выше). Данные из формы затем сохраняются в теги (если тег новый) и таблицы Item_Tags.

Items
---------
item_id
last_update

Tags
--------
tag_id
tag_type_id
tag

TagType
---------
tag_type_id
tag_type

Item_tags
---------
item_id
tag_id

Sample Data: Items
------------------
1,2009-06-15

Sample Data: TagType
--------------------
1,title
2,author

Sample Data: Tags
------------------

1,1,The Definitive Guide to Grails
2,2,Graeme Rocher
3,2, Jeff Brown

Sample Data: Item_tags
-----------------------
1,1
1,2
1,3

Ответы [ 2 ]

0 голосов
/ 08 июля 2009

Мне на самом деле нравится Грааль. Когда я впервые начал играть с ним пару недель назад, я не осознавал, что это полноценный язык. На самом деле это больше, чем это. Это полный веб-стек с веб-сервером и базой данных. В любом случае, краткий ответ на мой вопрос - да. Вы могли бы даже сказать да, конечно! Вот код для созданной мной метки:

import org.maflt.flashlit.pojo.Item
import org.maflt.flashlit.pojo.ItemTag
import org.maflt.flashlit.pojo.Metacollection
import org.maflt.flashlit.pojo.SetTagtype
import org.maflt.flashlit.pojo.Tag
import org.maflt.flashlit.pojo.Tagtype

/**
* @return Input form fields for all fields in the given Collection's Metadataset. Does not return ItemTags where TagType is not in the Metadataset.
*  
* In Hibernate, the
*
*    "from ItemTag b, Tag a where b.tag= a"
*
* query is a cross-join. The result of this query is a list of Object arrays where the first item is an ItemTag instance and the second is a Tag instance.
*
* You have to use e.g.
*
*    (ItemTag) theTags2[0][0]
*
* to access the first ItemTag instance.
* (http://stackoverflow.com/questions/1093918/findall-not-returning-correct-object-type)
**/
class AutoFormTagLib {

    def autoForm = {attrs, body ->
        //def masterList    = Class.forName(params.attrs.masterClass,false,Thread.currentThread().contextClassLoader).get(params.attrs.masterId)
        def theItem     = Item.get(attrs.itemId)
        def theCollection   = Metacollection.get(attrs.collectionId)
        def masterList  = theCollection.metadataSet.setTagtypes
        def theParams   = null
        def theTags     = null
        def itemTag     = null
        def tag         = null
        masterList.each {

            theParams   = [attrs.itemId.toLong(),it.tagtype.id]
            theTags     = ItemTag.findAll("from ItemTag d, Item c, Tag b, Tagtype a where d.item = c and d.tag = b and b.tagtype = a and c.id=? and a.id=?",theParams)

            for (int i=0;i<it.maxEntries;i++) {                 
                out << "<tr>\n"
                out << "    <td>${it.tagtype.tagtype}</td>\n"
                out << "    <td>\n"
                if (theTags[i]) {
                    itemTag     = (ItemTag) theTags[i][0]
                    //item  = (Item)    theTags[i][1]
                    tag     = (Tag) theTags[i][2] 
                    //itemTag   = (Tagtype) theTags[i][3]
                    out << "    <input name='${it.tagtype.tagtype}_${i}_${itemTag.id}' value='${tag.tag}' />\n";
                }
                else
                    out << "       <input name='${it.tagtype.tagtype}_${i}' />\n";
                out << "    </td>\n"
                out << "</tr>\n"
            }
        }

    }
}
0 голосов
/ 16 июня 2009

Я не совсем уверен, что вы спрашиваете здесь относительно «сохранения своих данных в другой таблице», но вот некоторые мысли.

Для вашей таблицы класс домена, который вам нужен, следующий:

тег класса { Тип строки

}

Поле идентификатора будет создано для вас автоматически при создании лесов.

Пожалуйста, добавьте больше информации к вашему вопросу, если этого недостаточно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...