It was a problem with the record initialisation code and the introspect method not being handled correctly. Fixed in:
37a59389bf65d4c558ff906427d52fb6fae5d912 Thanks to Ross for the help :-) Cheers, Tim On Feb 17, 6:11 pm, Ross Mellgren <dri...@gmail.com> wrote: > It is definitely the new. I thought that it was always this way because I > observed it (I thought) before I made those changes. I just reproduced your > exact case: > > val rec1 = MyMetaRecord.createRecord > val res1 = rec1.foo("zippy").fields.map(_.name) > val rec2 = new MyRecord() > val res2 = rec2.foo("zippy").fields.map(_.name) > > <div>{ String.valueOf(res1) }</div> ++ <div>{ String.valueOf(res2) > }</div> > > Result is: > > List(foo) > List(null) > > So createRecord is doing the introspection. I'll start by reverting out my > change to record and see if that makes the problem go away, to narrow it down. > > Do you have IM? We could cycle faster. > > -Ross > > On Feb 17, 2010, at 1:02 PM, Timothy Perrett wrote: > > > > > The field in question is a subtype of: > > > sealed abstract class TextADORField[OwnerType <: Record[OwnerType]] > > (rec: OwnerType) > > extends ADORField[OwnerType, String](rec){ > > def setFromString(s: String): Box[String] = { > > dirty_?(true) > > Full(set(s)) > > } > > > def setFromAny(in: Any): Box[String] = { > > dirty_?(true) > > in match { > > case seq: Seq[_] if !seq.isEmpty => seq.map(setFromAny)(0) > > case (s: String) :: _ => Full(set(s)) > > case null => Full(set(null)) > > case s: String => Full(set(s)) > > case Some(s: String) => Full(set(s)) > > case Full(s: String) => Full(set(s)) > > case None | Empty | Failure(_, _, _) => Full(set(null)) > > case o => Full(this.set(o.toString)) > > } > > } > > > def defaultValue = "" > > } > > > As you say, they should both go to setBox... Although, look at this: > > > scala> Visitor.createRecord.fields.map(_.name) > > res25: List[String] = List(email, last_name, first_name) > > > scala> new Visitor().fields.map(_.name) > > res27: List[String] = List(null, null, null) > > > That never used to be the case, you used to be able to call new and > > still get the introspection.... any ideas? > > > Cheers, Tim > > > On Feb 17, 5:52 pm, Ross Mellgren <dri...@gmail.com> wrote: > >> Name should be set by introspect during the record initialization, so I'm > >> not sure why it would matter. Also, setFromString and set should both > >> degenerate to setBox, which should do the actual work. Can you show your > >> setFromString implementation? Are you overriding anything other than > >> setFromAny and setFromString in the set department? > > >> -Ross > > >> On Feb 17, 2010, at 12:51 PM, Timothy Perrett wrote: > > >>> Not a generic one - to reproduce it you would need my custom record > >>> implementation and access to internal work servers (neither of which I > >>> can give out). > > >>> I have just realised however that the "name" field is present and > >>> correct when the field value is set: > > >>> field.setFromString > > >>> So it appears that its just a problem with set(<param>) ? > > >>> Cheers, Tim > > >>> On Feb 17, 5:46 pm, Ross Mellgren <dri...@gmail.com> wrote: > >>>> I'm starting to look at this. Do you have a repro case? > > >>>> -Ross > > >>>> On Feb 17, 2010, at 12:41 PM, Timothy Perrett wrote: > > >>>>> Guys, > > >>>>> Something strange is happening in Lift Record now - I have production > >>>>> work that for some reason is now not behaving the way it should. The > >>>>> custom record implementation that I have relies on knowing the field > >>>>> name, and for some reason, it appears to not be being set: > > >>>>> (where Visitor is an example implementation of my Record): > > >>>>> scala> new Visitor().email("dfsfdsf").fields.map(_.name) > >>>>> TRACE - Set the value of 'null' with 'dfsfdsf' and marked as dirty. > >>>>> (true) > > >>>>> I added some tracing and I see that the "def name" is always null > >>>>> now... this is a major problem for me. My field apply method looks > >>>>> like: > > >>>>> override def apply(in: FieldValueType): OwnerType = if > >>>>> (owner.meta.mutable_?){ > >>>>> set(in) > >>>>> dirty_?(true) > >>>>> Log.trace("Set the value of '"+name+"' with '"+in.toString+"' and > >>>>> marked as dirty. ("+dirty_?.toString+")") > >>>>> owner > >>>>> } else { > >>>>> owner.meta.createWithMutableField(owner, this, Box.!!(in)) > >>>>> } > > >>>>> Im really not sure what has broken this, but i've not changed my code > >>>>> other than adding the legacy check to accommodate ross' latest > >>>>> changes. > > >>>>> I URGENTLY need a fix for this - we have production code relying on > >>>>> this. > > >>>>> Cheers, Tim > > >>>>> -- > >>>>> You received this message because you are subscribed to the Google > >>>>> Groups "Lift" group. > >>>>> To post to this group, send email to lift...@googlegroups.com. > >>>>> To unsubscribe from this group, send email to > >>>>> liftweb+unsubscr...@googlegroups.com. > >>>>> For more options, visit this group > >>>>> athttp://groups.google.com/group/liftweb?hl=en. > > >>> -- > >>> You received this message because you are subscribed to the Google Groups > >>> "Lift" group. > >>> To post to this group, send email to lift...@googlegroups.com. > >>> To unsubscribe from this group, send email to > >>> liftweb+unsubscr...@googlegroups.com. > >>> For more options, visit this group > >>> athttp://groups.google.com/group/liftweb?hl=en. > > > -- > > You received this message because you are subscribed to the Google Groups > > "Lift" group. > > To post to this group, send email to lift...@googlegroups.com. > > To unsubscribe from this group, send email to > > liftweb+unsubscr...@googlegroups.com. > > For more options, visit this group > > athttp://groups.google.com/group/liftweb?hl=en. -- You received this message because you are subscribed to the Google Groups "Lift" group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.