It does now. KeyedMapper had an equals method that "does the right thing". I added hashCode and KeyedMappers should play well in HashMaps.
On Wed, May 27, 2009 at 8:52 AM, Derek Chen-Becker <[email protected]>wrote: > AFAIK, Mapper doesn't define equality. You have to do that yourself as you > would for any other Scala/Java class by overriding equals and hashcode. > Using a Set (HashSet, specifically) seems like a pretty efficient way of > doing this, although there may be a better way depending on your usage. > > Derek > > > On Wed, May 27, 2009 at 1:49 AM, valstadsve <[email protected]> wrote: > >> >> 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 >> >> >> > > > > -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Git some: http://github.com/dpp --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
