2015-02-06 3 views
-1

Я новичок в Grails, и у меня возникла проблема. Я хочу знать, есть ли способ отправить JSON и просмотреть и моделировать через «рендер» в Grails.Отправьте оба ответа и модель JSON в Grails

Я использую jQuery Datatable для отображения данных, возвращаемых с сервера, который считывается из JSON, возвращаемого контроллером. Мне также необходимо отображать сообщения об ошибках на одном и том же представлении в случае сбоя проверки в полях формы. Но я могу вернуть либо только JSON, либо модель и просмотр с помощью рендеринга. Я также попытался отправить JSON через модель, но это не сработало.

Это мой код: -

def hierarchyBreakInstance = new HierarchyBreak(params); 
String json = "{\"sEcho\":\"1\",\"iTotalRecords\":0,\"iTotalDisplayRecords\":0,\"aaData\":[]}"; 

hierarchyBreakInstance.errors.reject(message(code: 'hierarchyBreak.error.division.blank')); 
render(view: "hierarchyBreak", model: [hierarchyBreakInstance: hierarchyBreakInstance]); 
//render json; 

ГСП код: -

<g:hasErrors bean="${hierarchyBreakInstance}"> 
    <div class="errorMessage" role="alert"> 
     <g:eachError bean="${hierarchyBreakInstance}" var="error"> 
      <g:if test="${error in org.springframework.validation.FieldError}" > data-field-id="${error.field}"</g:if> 
       <g:message error="${error}"/> 
     </g:eachError> 
    </div> 
</g:hasErrors> 

Не могли бы вы, пожалуйста, дайте мне знать, если есть способ сделать это. Благодаря!

+0

Возможный дубликат [Grails rendering json to specific view] (http://stackoverflow.com/questions/16713377/grails-rendering-json-to-specific-view) – cfrick

+1

Честно надеюсь, вы не строите свой json как это в производственном коде – cfrick

+0

Нет, я не. Я использую этот json только для того, чтобы показать пустой datatable, если проверка не удалась. –

ответ

0

Вы можете использовать вот так.

def hierarchyBreakInstance = new HierarchyBreak(params); 
String json = "{\"sEcho\":\"1\",\"iTotalRecords\":0,\"iTotalDisplayRecords\":0,\"aaData\":[]}"; 

hierarchyBreakInstance.errors.reject(message(code: 'hierarchyBreak.error.division.blank')); 
render(view: "hierarchyBreak", model: [hierarchyBreakInstance: hierarchyBreakInstance,json:json]); 
//render json; 
+0

Я пробовал это уже, но datatable не читает json из модели. –

+0

Вы должны использовать ajax для отображения данных в таблице данных. это будет лучший вариант. –

+0

Запрос запрашивается контроллером через ajax сам, откуда мне нужно отправить ответ json обратно в datatable. –

0

Предполагая, что вы делаете запрос с некоторыми параметрами, и нужно вернуться, если был успешным или нет, а данные для заполнения таблицы с помощью AJAX. я буду делать на этом пути, использовать статусы HTTP, чтобы отметить, если это была проблема с проверкой (обычно мы возвращаем 400 Bad Request и сообщение)

Пример:

return ErrorSender.sendBadRequest("error validating field $field with value $value") 

а также errorsender имеет метод sendBadRequest

[response: ['message': message, error: "bad_request", status: 400, cause: []], status: 400] 

Если запрос был в порядке, вам нужно всего лишь ответить на данные с чем-то вроде

return [response: results, status: 200] 

На стороне клиента вы должны иметь одну функцию, если запрос был выполнен правильно для анализа результата, а одна функция, если у запроса есть какая-либо проверенная проблема с данными, проблема с базой данных или что-то еще, что вызвало то, что запрос не возвратил 200 (в пример), есть еще коды статуса, вы можете проверить на http://en.wikipedia.org/wiki/List_of_HTTP_status_codes

PD: Первоначальная проверка должна выполняться на стороне клиента.

+0

Спасибо за информацию Рикардо, но мне не нужно показывать коды состояния HTTP. Скорее я хочу показать собственное сообщение об ошибке, если проверка исходной формы поля не удалась. –

+0

См. Обновление –

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