JSON List render with JQuery

393 views
Skip to first unread message

Sergei

unread,
Jul 13, 2011, 10:51:42 AM7/13/11
to play-framework
Need some help, i have simple Contoller function:

public static void getNews(){
List<Thread> threads = Thread.findAll();
renderJSON(threads);
}

And front-end request:

<script type="text/javascript">
$.getJSON('@{Application.getNews()}', function(threads) {
var items = [];

$.each(threads, function(title, text) {
items.push("<span>" + item.text + "</span>");
});
});
</script>

But it doesn't work. Could you write the correct jquery request?

Julien Richard-Foy

unread,
Jul 13, 2011, 11:52:27 AM7/13/11
to play-fr...@googlegroups.com
See the documentation: http://api.jquery.com/jQuery.each
$.each takes a callback receiving 2 parameters: the index and the
element. In your code your callback takes two parameters but you are
not using them… (and you gave them wrong names).

Try this:
$.each(threads, function(i, item) {

Sergei

unread,
Jul 15, 2011, 11:05:31 AM7/15/11
to play-framework

> Try this:
>   $.each(threads, function(i, item) {

$(document).ready(function(){
$.getJSON('@{Application.getNews()}', function(threads) {
$.each(threads, function(i, item) {
$(".indexaside").append(item.text);
});
});
});

But i have:

@6750mg4b9
Internal Server Error (500) for request GET /application/getnews

Execution exception (In /app/controllers/Application.java around line
43)
IllegalStateException occured : circular reference error Offending
field: boar
d Offending object: preserveType: false, type: class models.Board,
obj: Board
[2]

play.exceptions.JavaExecutionException: circular reference error
Offending field: board

Offending object: preserveType: false, type: class models.Board,
obj: Board[2]

at play.mvc.ActionInvoker.invoke(ActionInvoker.java:227)
at Invocation.HTTP Request(Play!)
Caused by: java.lang.IllegalStateException: circular reference error
Offending field: board

Offending object: preserveType: false, type: class models.Board,
obj: Board[2]

at
com.google.gson.CircularReferenceException.createDetailedException(Ci
rcularReferenceException.java:43)
at
com.google.gson.JsonSerializationVisitor.visitObjectField(JsonSeriali
zationVisitor.java:115)
at
com.google.gson.ObjectNavigator.navigateClassFields(ObjectNavigator.j
ava:164)
at com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:
131)
at
com.google.gson.JsonSerializationContextDefault.serialize(JsonSeriali
zationContextDefault.java:56)
at
com.google.gson.JsonSerializationContextDefault.serialize(JsonSeriali
zationContextDefault.java:49)
at com.google.gson.DefaultTypeAdapters
$CollectionTypeAdapter.serialize(D
efaultTypeAdapters.java:528)
at com.google.gson.DefaultTypeAdapters
$CollectionTypeAdapter.serialize(D
efaultTypeAdapters.java:510)
at
com.google.gson.JsonSerializationVisitor.findAndInvokeCustomSerialize
r(JsonSerializationVisitor.java:184)
at
com.google.gson.JsonSerializationVisitor.visitFieldUsingCustomHandler
(JsonSerializationVisitor.java:203)
at
com.google.gson.ObjectNavigator.navigateClassFields(ObjectNavigator.j
ava:158)
at com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:
131)
at
com.google.gson.JsonSerializationVisitor.getJsonElementForChild(JsonS
erializationVisitor.java:147)
at
com.google.gson.JsonSerializationVisitor.addAsChildOfObject(JsonSeria
lizationVisitor.java:125)
at
com.google.gson.JsonSerializationVisitor.visitObjectField(JsonSeriali
zationVisitor.java:112)
at
com.google.gson.ObjectNavigator.navigateClassFields(ObjectNavigator.j
ava:164)
at com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:
131)
at
com.google.gson.JsonSerializationContextDefault.serialize(JsonSeriali
zationContextDefault.java:56)
at
com.google.gson.JsonSerializationContextDefault.serialize(JsonSeriali
zationContextDefault.java:49)
at com.google.gson.DefaultTypeAdapters
$CollectionTypeAdapter.serialize(D
efaultTypeAdapters.java:528)
at com.google.gson.DefaultTypeAdapters
$CollectionTypeAdapter.serialize(D
efaultTypeAdapters.java:510)
at
com.google.gson.JsonSerializationVisitor.findAndInvokeCustomSerialize
r(JsonSerializationVisitor.java:184)
at
com.google.gson.JsonSerializationVisitor.visitUsingCustomHandler(Json
SerializationVisitor.java:160)
at com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:
106)
at
com.google.gson.JsonSerializationContextDefault.serialize(JsonSeriali
zationContextDefault.java:56)
at com.google.gson.Gson.toJsonTree(Gson.java:233)
at com.google.gson.Gson.toJson(Gson.java:273)
at com.google.gson.Gson.toJson(Gson.java:253)
at play.mvc.results.RenderJson.<init>(RenderJson.java:20)
at play.mvc.Controller.renderJSON(Controller.java:325)
at controllers.Application.getNews(Application.java:43)
at
play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:540)

at play.mvc.ActionInvoker.invoke(ActionInvoker.java:498)
at
play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:474)

at
play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:469)

at play.mvc.ActionInvoker.invoke(ActionInvoker.java:157)
... 1 more
Caused by: com.google.gson.CircularReferenceException: circular
reference error
at
com.google.gson.JsonSerializationVisitor.start(JsonSerializationVisit
or.java:56)
at com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:
114)
at
com.google.gson.JsonSerializationVisitor.getJsonElementForChild(JsonS
erializationVisitor.java:147)
at
com.google.gson.JsonSerializationVisitor.addAsChildOfObject(JsonSeria
lizationVisitor.java:125)
at
com.google.gson.JsonSerializationVisitor.visitObjectField(JsonSeriali
zationVisitor.java:112)
... 35 more

I create a new class "JsonMessage"(String,String), and redefined
passed list. It's works. Thx.

Jarl André

unread,
Jul 17, 2011, 10:22:30 AM7/17/11
to play-framework
I have bumped into this same problem, and my solution to this is not
to avoid oneToMany or whatever may offend the JSON serializer, but
rather to null out the offending fields before sending them to
renderJSON.

For eks:

Post post = Post.getById(id);
Comment newComment = new Comment();
newComment.title =.....
newComment.content = ....
newComment.post = post;
newComment.save();
post.comments = null; // avoid circular due to newComment having
reference to post having list of comment having post having ....
renderJSON(comment);

On 15 Jul, 17:05, Sergei <pimenov.ser...@gmail.com> wrote:
> > Try this:
> >   $.each(threads, function(i, item) {
>
> $(document).ready(function(){
>           $.getJSON('@{Application.getNews()}', function(threads) {
>             $.each(threads, function(i, item) {
>                   $(".indexaside").append(item.text);
>                  });
>     });
>
> });
>
> But i have:
>
> @6750mg4b9
> Internal Server Error (500) for request GET /application/getnews
>
> Execution exception (In /app/controllers/Application.java around line
> 43)
> IllegalStateException occured :circularreference error   Offending
> field: boar
> d    Offending object: preserveType: false, type: class models.Board,
> obj: Board
> [2]
>
> play.exceptions.JavaExecutionException:circularreference error
>   Offending field: board
>
>   Offending object: preserveType: false, type: class models.Board,
> obj: Board[2]
>
>         at play.mvc.ActionInvoker.invoke(ActionInvoker.java:227)
>         at Invocation.HTTP Request(Play!)
> Caused by: java.lang.IllegalStateException:circularreference error
Reply all
Reply to author
Forward
0 new messages