Long time reader, first time poster.
Also first time liftweb developer. I have an app that loads rows from
db using the Mapper framework, and displays them with a checkbox each.
I track which objects are checked by storing them in a collection. To
find the value of a checkbox (first argument to ajaxCheckbox), I do a
lookup to see if the respective object is in the collection.
I have tried two collections for this purpose, and only one of them
works: (Names have been changed to protect... well, me)
1) Store mapped objects in a Set. This typically leads to:
"check" -> ajaxCheckbox(coll.contains(a), v => { if (coll.contains(a))
{ // And so forth
2) Store mapped objects in a Map, using their id (a Long) as key. This
usually ends in:
"check" -> ajaxCheckbox(coll.contains(a.id), v => { if ( coll.contains
(a.id)) { // And so forth and so forth
As you might suspect from the subject of this post, only the second
strategy works as expected. Comparing id's is obviously more
reliable. Using sets and relying on object identity instead, the
checked objects render unchecked (and this is somewhat disturbing)
MOST of the time. My guess is there is some object management going on
behind the scenes, so that different requests deal with different
instances for the same rows. However, the equals/hashCode regime of
the Mother Platform _is_ supposed to resolve such things for
collections ...
So, being all new to this, I have several questions:
1) Should object identity work for subclasses of Mapper and friends?
I.e. is this a bug?
2) Or am I expected to implement equality myself?
3) Are there better ways to track a long list of checkboxes? I have
noticed that GUI/network lag and asynchrony, the (first) a in ajax,
may produce twinkling checkboxes after a flurry of clicks...
4) Somewhat more far-fetched: Are collections in scala (gulp) not
using equals/hashCode?
Other than that, I am impressed with liftweb and find it an excellent
introduction to Scala. Books are on order, too!
Kjetil
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Lift" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/liftweb?hl=en
-~----------~----~----~----~------~----~------~--~---