2013-09-19 8 views
0

Возможно ли использовать функцию Grails remoteFunction для вызова метода create на объект дочернего домена?Создание дочернего доменного объекта с страницы gsp

Я пытаюсь вызвать функцию создания в контроллере ребенка от remoteFunction вызова на моей странице GSP, но получаю сообщение об ошибке

Message: Provided id of the wrong type for class XXX.YYY. Expected: class java.lang.Long, got class java.lang.String

И код remoteFunction выглядит так:

$.ajax({ 
    type: 'POST', 
    url: "${remoteFunction(controller:'childController' action:'create')}" 
}); 

Я обыскал Google все утро, и единственное, что я могу найти, это remoteFunctions для каскадирования оператора select.

+0

Проблема не в вашей дистанционной функции. Это тот факт, что ваш метод создания, очевидно, ожидает поиска объекта по тому, что входит в params.id. Скорее всего (если вы отлаживаете свой код), вы увидите, что он входит как «undefined», так как ваш remoteFunction не переходит в параметр id. – Gregg

+0

@Gregg Не тот случай. Я помещаю println params.parent.id внутри метода create, и он есть. – idonaldson

+0

Можете ли вы изменить свой вопрос и показать метод создания с вашего контроллера? – Gregg

ответ

0

Помните, что метод create дает вам представление gsp create. В этом представлении на нем есть кнопка сохранения, которая отправляется в метод контроллера сохранения. Я думаю, вам нужно написать собственный метод, который создает новый класс и сохраняет все за один снимок.

0

Так что я работаю до сих пор это:

<script type="text/javascript"> 
function someFunction(){ 
    var id = ${parentInstance.id}; 
    var $element = $('#elements ul li.selectedAdd'); 
    $element.removeClass('selectedAdd'); 
    $('#right-side ul').append($element); 
    ${remoteFunction(
     action:'createChild', 
     update:'right-side', 
     params:'\'id=\'+ escape(id) +\'&childType=\' + escape(childType)' 
    )} 
}; 

Который работает с этим методом контроллера:

def createChildBlock = { 
    def parent = Parent.get(params.id) 
    def childBlockInstance = new ChildBlock(childType:params.childType,parent:parent) 
    childBlockInstance = myService.saveChildBlock(parent,params) 

    render (template:"childBlock", model:[childBlockInstance:childBlockInstance]) 
} 

И это работает. Оба объекта домена сохраняются в базе данных, и представление обновляется. Но как я могу сохранить предыдущие объекты в div , который получает обновление? Всякий раз, когда я запускаю функцию, предыдущий ребенок удаляется и заменяется новым, я просто хочу добавить новый в конец списка.

Смежные вопросы