Почему и как ответить на подтверждение OpenDolphin 'ValueChanged'

У меня есть простое приложение grails server/groovyfx, где openDolphin используется для связи клиент / сервер.

Вот что происходит: когда команда CMD_LOG отправляется от клиента к серверу, сервер обновляет одно значение presentationModel и отвечает: "Что происходит?". OpenDolphin выполняет еще одно действие: клиент отправляет подтверждение "ValueChanged", сервер принимает его и отвечает на пустую команду, а клиент получает его.

У меня вопрос, КАК я могу реализовать пользовательский ответ на ValueChanged, например, проверить соответствующее значение в БД, или если клиенту разрешено изменять его. И ПОЧЕМУ ответ отправил, когда я не реализовал это? Я не чувствую себя хорошо при отправке пустых сообщений из-под моего контроля.

Немного кода, на стороне клиента, это закрытие вызывается при нажатии кнопки:

def sendToServer = { message ->
    clientDolphin.send(message, new OnFinishedHandlerAdapter() {
        @Override
        public void onFinished(List<ClientPresentationModel> presentationModels) {
            // after action on server, this wants to read changed presentation model
            }
        }
    });
}

журнал клиента:

INFO: C: sending batch of size 1
IX 17, 2013 7:46:59 ODP. java_util_logging_Logger$info$0 call
INFO: C:           -> Command: CMD_LOG
IX 17, 2013 7:46:59 ODP. org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoCachedMethodSiteNoUnwrap invoke
INFO: C: server responded with 2 command(s): [ValueChanged, Whats up?]
IX 17, 2013 7:46:59 ODP. org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoCachedMethodSiteNoUnwrap invoke
INFO: C: updating 'x' id '0' from 'null' to '10'
IX 17, 2013 7:46:59 ODP. java_util_logging_Logger$info$0 call
INFO: C: sending batch of size 1
IX 17, 2013 7:46:59 ODP. java_util_logging_Logger$info$0 call
INFO: C:           -> Command: ValueChanged attr:0, null -> 10
IX 17, 2013 7:46:59 ODP. org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoCachedMethodSiteNoUnwrap invoke
SEVERE: C: cannot handle unknown command 'Command: Whats up?'
IX 17, 2013 7:47:00 ODP. org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoCachedMethodSiteNoUnwrap invoke
INFO: C: server responded with 0 command(s): []

Сторона сервера, соответствующий обработчик действий:

class SimpleStoreServerDirector extends DolphinServerAction {
    @Override
    void registerIn(ActionRegistry actionRegistry) {

        actionRegistry.register "CMD_LOG", { NamedCommand command, response ->
            def pm = serverDolphin.findPresentationModelById("input")
            changeValue pm["x"], 10

            response.add(new NamedCommand("Whats up?"))
        }
}

И, наконец, журнал сервера:

Creating new Dolphin session
LOG: proccessing Command: CreatePresentationModel pmId input pmType null  attributes [[id:0, propertyName:x, tag:VALUE, value:null, qualifier:null]]
LOG results: []
LOG: proccessing Command: CMD_LOG
LOG results: [Command: ValueChanged attr:0, null -> 10, Command: Whats up?]
LOG: proccessing Command: ValueChanged attr:0, null -> 10
LOG results: []

Спасибо заранее за ответы, или любые полезные документы или ссылки на учебники.

1 ответ

Решение

В: КАК я могу реализовать пользовательский ответ на ValueChanged? A: Как и для любой другой команды, вы можете зарегистрировать обработчик для команды ValueChanged. Посмотрите общую демонстрацию Tacho для примера.

В: Почему отправляется пустой ответ? A: Это поведение StoreValueChangeAction, которое является одним из действий по умолчанию. Он сохраняет изменение значения в хранилище модели и, поскольку каждый запрос должен возвращать что-либо, возвращает пустой список команд.

Другие вопросы по тегам