[Lift] Re: Asynchronous Javascript problem

2009-08-06 Thread Channing Walton

I've added a much simpler example too, see simple.html
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: More than one lift:surround in HTML file

2009-08-06 Thread pabraham

Thanks everyone.  I can get things to work now using lift:with-
param ...

However, I found a post[1] by DPP that says that lift:with-param ...
is deprecated.  Is this true?

Regards,

Paul.

[1] http://article.gmane.org/gmane.comp.web.lift/820


On Aug 5, 10:55 pm, Timothy Perrett timo...@getintheloop.eu wrote:
 Marius is right, use with-param... That's the correct solution here.

 Cheers, Tim

 On 05/08/2009 22:19, pabraham paulabraham...@googlemail.com wrote:



  I've added lift:children to my index.html file and now get:

  XML Parsing Error: junk after document element
  Location:http://192.168.96.150:8080/
  Line Number 113, Column 1:html xmlns:lift=http://liftweb.net/;
  xmlns=http://www.w3.org/1999/xhtml;
  ^

  Any ideas?

  In the meantime I can look at lift:with-param.

  Paul.

  On 5 Aug, 22:08, Naftoli Gugenheim naftoli...@gmail.com wrote:
  XML documents need to have a single top-level element. Surround the whole
  index.html with lift:children.

  -

  pabrahampaulabraham...@googlemail.com wrote:

  Hello there,

  Is it possible for an HTML file to have more than one lift:surround
  tag?

  For example, default.html contains

  ...
  lift:bind name=content
  ...
  lift:bind name=sidebar
  ...

  My index.html contains

  lift:surround with=default at=content
    pThis is some content/p
  /lift:surround
  lift:surround with=default at=sidebar
    pThis is some content in the sidebar/p
  /lift:surround

  From my fruitless attempts, it seems that the answer to my question is
  no, but is there any way that I can get this sort of thing to work?

  Thanks.

  Paul.

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: More than one lift:surround in HTML file

2009-08-06 Thread pabraham


Firefox 3.5.2

Funnily enough, I can't right click to view source, but Ctrl+U works.

The first lines are:

?xml version=1.0 encoding=UTF-8?
!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN http://
www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd
html xmlns:lift=http://liftweb.net/; xmlns=http://www.w3.org/1999/
xhtmlhead

I don't see anything funny there.

Paul.


On Aug 5, 10:23 pm, Naftoli Gugenheim naftoli...@gmail.com wrote:
 Which browser gives that error? What do you see in View Source?

 -

 pabrahampaulabraham...@googlemail.com wrote:

 I've added lift:children to my index.html file and now get:

 XML Parsing Error: junk after document element
 Location:http://192.168.96.150:8080/
 Line Number 113, Column 1:html xmlns:lift=http://liftweb.net/;
 xmlns=http://www.w3.org/1999/xhtml;
 ^

 Any ideas?

 In the meantime I can look at lift:with-param.

 Paul.

 On 5 Aug, 22:08, Naftoli Gugenheim naftoli...@gmail.com wrote:

  XML documents need to have a single top-level element. Surround the whole 
  index.html with lift:children.

  -

  pabrahampaulabraham...@googlemail.com wrote:

  Hello there,

  Is it possible for an HTML file to have more than one lift:surround
  tag?

  For example, default.html contains

  ...
  lift:bind name=content
  ...
  lift:bind name=sidebar
  ...

  My index.html contains

  lift:surround with=default at=content
    pThis is some content/p
  /lift:surround
  lift:surround with=default at=sidebar
    pThis is some content in the sidebar/p
  /lift:surround

  From my fruitless attempts, it seems that the answer to my question is
  no, but is there any way that I can get this sort of thing to work?

  Thanks.

  Paul.

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: More than one lift:surround in HTML file

2009-08-06 Thread marius d.



On Aug 6, 3:46 pm, pabraham paulabraham...@googlemail.com wrote:
 Thanks everyone.  I can get things to work now using lift:with-
 param ...

 However, I found a post[1] by DPP that says that lift:with-param ...
 is deprecated.  Is this true?

We tried to deprecate it a little while ago but AFAIK it's not
deprecated anymore.


 Regards,

 Paul.

 [1]http://article.gmane.org/gmane.comp.web.lift/820

 On Aug 5, 10:55 pm, Timothy Perrett timo...@getintheloop.eu wrote:

  Marius is right, use with-param... That's the correct solution here.

  Cheers, Tim

  On 05/08/2009 22:19, pabraham paulabraham...@googlemail.com wrote:

   I've added lift:children to my index.html file and now get:

   XML Parsing Error: junk after document element
   Location:http://192.168.96.150:8080/
   Line Number 113, Column 1:html xmlns:lift=http://liftweb.net/;
   xmlns=http://www.w3.org/1999/xhtml;
   ^

   Any ideas?

   In the meantime I can look at lift:with-param.

   Paul.

   On 5 Aug, 22:08, Naftoli Gugenheim naftoli...@gmail.com wrote:
   XML documents need to have a single top-level element. Surround the whole
   index.html with lift:children.

   -

   pabrahampaulabraham...@googlemail.com wrote:

   Hello there,

   Is it possible for an HTML file to have more than one lift:surround
   tag?

   For example, default.html contains

   ...
   lift:bind name=content
   ...
   lift:bind name=sidebar
   ...

   My index.html contains

   lift:surround with=default at=content
     pThis is some content/p
   /lift:surround
   lift:surround with=default at=sidebar
     pThis is some content in the sidebar/p
   /lift:surround

   From my fruitless attempts, it seems that the answer to my question is
   no, but is there any way that I can get this sort of thing to work?

   Thanks.

   Paul.
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: Alternate part of view

2009-08-06 Thread David Pollak
On Wed, Aug 5, 2009 at 8:44 PM, Naftoli Gugenheim naftoli...@gmail.comwrote:


 What's the smartest / most concise way to achieve the following in the
 corresponding view xhtml and snippet code:
 Parts of the view have to change, depending on whether something is set.
 For example, in the area where you select the client, if the client is None,
 then it displays an interface to select a client. If it's set to a Some then
 it displays the client's details with a button to unset it. This pattern is
 repeated.
 My current strategy is to have two elements, req:noClient and req:client,
 which have different xhtml contents. Then in the snippet I bind them to two
 NodeSeq functions, one that binds useful contents when the client is None
 and returns NodeSeq.Empty otherwise; and another function that binds when
 it's a Some and returns Empty otherwise. However, it seems to be somewhat
 redundant in theory.
 So does anyone have a better way of switching view parts?


If it's repeated, then lift:embed / the part that you need.

lift:MaybeClient
  client:yeslift:embed what=/templates/client_edit.html//client:yes
  client:nolift:embed what=/templates/client_chooser.html/client:no
/lift:MaybeClient




 Thanks.



 



-- 
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 liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: More than one lift:surround in HTML file

2009-08-06 Thread David Pollak
On Thu, Aug 6, 2009 at 5:48 AM, marius d. marius.dan...@gmail.com wrote:




 On Aug 6, 3:46 pm, pabraham paulabraham...@googlemail.com wrote:
  Thanks everyone.  I can get things to work now using lift:with-
  param ...
 
  However, I found a post[1] by DPP that says that lift:with-param ...
  is deprecated.  Is this true?

 We tried to deprecate it a little while ago but AFAIK it's not
 deprecated anymore.


I dislike it and don't see a reason for it.  Others do.  I lose. ;-)




 
  Regards,
 
  Paul.
 
  [1]http://article.gmane.org/gmane.comp.web.lift/820
 
  On Aug 5, 10:55 pm, Timothy Perrett timo...@getintheloop.eu wrote:
 
   Marius is right, use with-param... That's the correct solution here.
 
   Cheers, Tim
 
   On 05/08/2009 22:19, pabraham paulabraham...@googlemail.com wrote:
 
I've added lift:children to my index.html file and now get:
 
XML Parsing Error: junk after document element
Location:http://192.168.96.150:8080/
Line Number 113, Column 1:html xmlns:lift=http://liftweb.net/;
xmlns=http://www.w3.org/1999/xhtml;
^
 
Any ideas?
 
In the meantime I can look at lift:with-param.
 
Paul.
 
On 5 Aug, 22:08, Naftoli Gugenheim naftoli...@gmail.com wrote:
XML documents need to have a single top-level element. Surround the
 whole
index.html with lift:children.
 
-
 
pabrahampaulabraham...@googlemail.com wrote:
 
Hello there,
 
Is it possible for an HTML file to have more than one lift:surround
tag?
 
For example, default.html contains
 
...
lift:bind name=content
...
lift:bind name=sidebar
...
 
My index.html contains
 
lift:surround with=default at=content
  pThis is some content/p
/lift:surround
lift:surround with=default at=sidebar
  pThis is some content in the sidebar/p
/lift:surround
 
From my fruitless attempts, it seems that the answer to my question
 is
no, but is there any way that I can get this sort of thing to work?
 
Thanks.
 
Paul.
 



-- 
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 liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: More than one lift:surround in HTML file

2009-08-06 Thread Timothy Perrett


Haha yeah... With-param has had somewhat of a chequered past! Its here to
stay for the time being though so don't worry about using it.

Cheers, Tim

On 06/08/2009 13:48, marius d. marius.dan...@gmail.com wrote:

 
 
 
 On Aug 6, 3:46 pm, pabraham paulabraham...@googlemail.com wrote:
 Thanks everyone.  I can get things to work now using lift:with-
 param ...
 
 However, I found a post[1] by DPP that says that lift:with-param ...
 is deprecated.  Is this true?
 
 We tried to deprecate it a little while ago but AFAIK it's not
 deprecated anymore.
 
 
 Regards,
 
 Paul.
 
 [1]http://article.gmane.org/gmane.comp.web.lift/820
 
 On Aug 5, 10:55 pm, Timothy Perrett timo...@getintheloop.eu wrote:
 
 Marius is right, use with-param... That's the correct solution here.
 
 Cheers, Tim
 
 On 05/08/2009 22:19, pabraham paulabraham...@googlemail.com wrote:
 
 I've added lift:children to my index.html file and now get:
 
 XML Parsing Error: junk after document element
 Location:http://192.168.96.150:8080/
 Line Number 113, Column 1:html xmlns:lift=http://liftweb.net/;
 xmlns=http://www.w3.org/1999/xhtml;
 ^
 
 Any ideas?
 
 In the meantime I can look at lift:with-param.
 
 Paul.
 
 On 5 Aug, 22:08, Naftoli Gugenheim naftoli...@gmail.com wrote:
 XML documents need to have a single top-level element. Surround the whole
 index.html with lift:children.
 
 -
 
 pabrahampaulabraham...@googlemail.com wrote:
 
 Hello there,
 
 Is it possible for an HTML file to have more than one lift:surround
 tag?
 
 For example, default.html contains
 
 ...
 lift:bind name=content
 ...
 lift:bind name=sidebar
 ...
 
 My index.html contains
 
 lift:surround with=default at=content
   pThis is some content/p
 /lift:surround
 lift:surround with=default at=sidebar
   pThis is some content in the sidebar/p
 /lift:surround
 
 From my fruitless attempts, it seems that the answer to my question is
 no, but is there any way that I can get this sort of thing to work?
 
 Thanks.
 
 Paul.
  
 



--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: Title function

2009-08-06 Thread Derek Chen-Becker
Putting it in an object won't work, since you probably want the title to
be done per-request.  To clarify what I'm saying, here's a small example of
how I would set the title for an edit page:

First, the template:

lift:surround at=content
  head
titlelift:Info.title //title
  /head

  lift:Info.edit form=POST 
h1Type stuff here:/h1
edit:stuff /
input type=submit value=Save /
  /lift:Info.edit
/lift:surround

Then the snippet class:

class Info {
  object toEdit extends RequestVar[Box[InfoStuff]](Empty)

  def title(ignore : NodeSeq) : NodeSeq = Text(toEdit map (Edit  + _.name)
openOr No item to edit!)

  def edit (xhtml : NodeSeq) : NodeSeq = ...
}

This assumes that whatever page is redirecting to the edit page will set the
RequestVar, something like:

S.redirectTo(/edit, () = Info.toEdit(Full(someInfoStuffInstance)))

Does that make sense?

Derek

On Wed, Aug 5, 2009 at 11:14 AM, Naftoli Gugenheim naftoli...@gmail.comwrote:


 You mean the snippet should put its new/edit flag somewhere that the Title
 can read, like a top level object? Then it doesn't need to be an AnyVar
 because it can be set on every request, if Title is processed after the
 snippet in each request--and if not then I don't see how a RequestVar etc.
 would work.
 Seems like it may be more work than the other way, though.
 By the way I sent corrected message afterward--my question was not about
 LocParams but of the items of type ParamType.

 -
 Derek Chen-Beckerdchenbec...@gmail.com wrote:

 If you're just looking for a way to programmatically set the title, getting
 into LocParam might be a little bit of overkill. It's probably simpler to
 set up your own SessionVars or RequestVars and access them from the Title
 closure:


 http://scala-tools.org/scaladocs/liftweb/1.0/net/liftweb/sitemap/Loc/Title.html

 Derek

 On Wed, Aug 5, 2009 at 9:45 AM, Naftoli Gugenheim naftoli...@gmail.com
 wrote:

 
 
  -
  Naftoli Gugenheimnaftoli...@gmail.com wrote:
 
  So what I'm not clear on now is the input to Title. What is a LocParam,
 and
  how do you you use loc params? What is forceParam, defaultParams, param,
 and
  foundParam? And in any case how can Title know the value of the
 registered
  StatefulSnippet's newOrEdit state?
  Thanks!
 
  -
  David Pollakfeeder.of.the.be...@gmail.com wrote:
 
  On Tue, Aug 4, 2009 at 12:47 PM, Naftoli Gugenheim naftoli...@gmail.com
  wrote:
 
   Maybe my setup is atypical then :)
   My default.html is does not have a title tag; instead each view has its
   own, relying on head merge.
   I don't know if originally I had it in default using lift:Menu.title or
   not, but the difficulty with that would be that some pages can be used
 to
   edit or add a new item, and the title needs to reflect that.
 
 
  Because the Title() case class takes a function, you can have it do all
  forms of stuff including looking to the current user, whether you're
  editing, and do the right thing.
 
 
  
   So either (1) I need a way that the value of Menu.title will depend on
  data
   in various StatefulSnippets; or (2) make the title ambiguous (add/edit
   neutral); or (3) leave the titles in the views and process them with a
   function somehow; or (4) put a snippet in the title of every view to
 get
  the
   user.
  
  
  
   -
   David Pollakfeeder.of.the.be...@gmail.com wrote:
  
   On Sun, Aug 2, 2009 at 4:35 PM, Naftoli Gugenheim 
 naftoli...@gmail.com
   wrote:
  
   
How does the Title LocParam work?
  
  
   The Title case class has a function that converts the current object
   associated with the Loc into a String representing the title of the
 page
   represented by the Loc.
  
  
   
Is there a way to modify all titles to e.g. include the logged in
  user's
name, without having to edit all the views?
  
  
   The title tag is typically defined in the default template.  You
 could
   include a snippet in the title tag that would contain the user's
 name.
   I
   would see this as separate from the title of the specific page referred
  to
   by the Loc.Title.
  
  
   
   

   
  
  
   --
   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
  
   
  
 
 
  --
  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 liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 

[Lift] IE8 and single-field forms

2009-08-06 Thread Ryan Donahue

Apparently if your form has only one text field (input tag w/
type=text) and one button tag, IE8 does not include the button as a
field in the post, but only includes the text field.  Here's the IE8
bug report:
https://connect.microsoft.com/IE/feedback/ViewFeedback.aspx?FeedbackID=389736

The result is that my function that is bound to the button is not
called when processing the post.  I've worked around it by adding
another input tag of type=text and style=display:none (hidden field
didn't fix it).

Anyway, just wanted to post a heads up and see if anybody else has
come across this.

The relevant code is below.

Template:

lift:MemberSnippet.sendConfirmation form=POST
  fieldset
legendConfirm Email Address/legend
pFirst, we need to confirm your email address so we know it's
yours./p
labelEmail Address:/labelbr/signup:email/br/
signup:submit/
  /fieldset
/lift:MemberSnippet.sendConfirmation


Snippet:

//note that my SForm.button is just the same as SHtml.submit but I use
a button instead of input w/ type=submit

  def sendConfirmation(xhtml:NodeSeq) : NodeSeq = {

def doConfirm() : Any = {
  if (email.is.length  0) {
try {
  MemberSystem.confirmEmailAddress(email.is)
  notice(Your confirmation email will be sent in a few
moments.)
  hideForms.set(true)
}
catch {
  case MemberSystem.InvalidEmailAddressException(msg) =
error(The email address you provided +msg)
  case MemberSystem.EmailAddressAlreadyInUseException =
error(The email address you provided is already being
used by another member)
  case _ =
error(We were unable to send to this email address,
please try another)
}
  }
  else { error (Email address is required) ; Empty}
}

if (!hideForms.is)
  bind(signup, xhtml,
   email - FocusOnLoad(SForm.text(email.is, email(_))),
   submit - SForm.button(Send Confirmation, doConfirm))
else Nil

  }


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: Alternate part of view

2009-08-06 Thread Naftoli Gugenheim

No, I meant that this pattern of parts of the view being alternatives to each 
other repeats, in other words the view has several pairs of alternatives.

-
David Pollakfeeder.of.the.be...@gmail.com wrote:

On Wed, Aug 5, 2009 at 8:44 PM, Naftoli Gugenheim naftoli...@gmail.comwrote:


 What's the smartest / most concise way to achieve the following in the
 corresponding view xhtml and snippet code:
 Parts of the view have to change, depending on whether something is set.
 For example, in the area where you select the client, if the client is None,
 then it displays an interface to select a client. If it's set to a Some then
 it displays the client's details with a button to unset it. This pattern is
 repeated.
 My current strategy is to have two elements, req:noClient and req:client,
 which have different xhtml contents. Then in the snippet I bind them to two
 NodeSeq functions, one that binds useful contents when the client is None
 and returns NodeSeq.Empty otherwise; and another function that binds when
 it's a Some and returns Empty otherwise. However, it seems to be somewhat
 redundant in theory.
 So does anyone have a better way of switching view parts?


If it's repeated, then lift:embed / the part that you need.

lift:MaybeClient
  client:yeslift:embed what=/templates/client_edit.html//client:yes
  client:nolift:embed what=/templates/client_chooser.html/client:no
/lift:MaybeClient




 Thanks.



 



-- 
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 liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: Alternate part of view

2009-08-06 Thread David Pollak
I really need to see the resulting view code that you'd like to see
depending on the conditions.

On Thu, Aug 6, 2009 at 7:47 AM, Naftoli Gugenheim naftoli...@gmail.comwrote:


 No, I meant that this pattern of parts of the view being alternatives to
 each other repeats, in other words the view has several pairs of
 alternatives.


I don't understand why the example doesn't allow for alternatives that
repeat.




 -
 David Pollakfeeder.of.the.be...@gmail.com wrote:

 On Wed, Aug 5, 2009 at 8:44 PM, Naftoli Gugenheim naftoli...@gmail.com
 wrote:

 
  What's the smartest / most concise way to achieve the following in the
  corresponding view xhtml and snippet code:
  Parts of the view have to change, depending on whether something is set.
  For example, in the area where you select the client, if the client is
 None,
  then it displays an interface to select a client. If it's set to a Some
 then
  it displays the client's details with a button to unset it. This pattern
 is
  repeated.
  My current strategy is to have two elements, req:noClient and req:client,
  which have different xhtml contents. Then in the snippet I bind them to
 two
  NodeSeq functions, one that binds useful contents when the client is None
  and returns NodeSeq.Empty otherwise; and another function that binds when
  it's a Some and returns Empty otherwise. However, it seems to be somewhat
  redundant in theory.
  So does anyone have a better way of switching view parts?


 If it's repeated, then lift:embed / the part that you need.

 lift:MaybeClient
  client:yeslift:embed what=/templates/client_edit.html//client:yes
  client:nolift:embed what=/templates/client_chooser.html/client:no
 /lift:MaybeClient



 
  Thanks.
 
 
 
  
 


 --
 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



 



-- 
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 liftweb@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
-~--~~~~--~~--~--~---



[Lift] SOAP web services?

2009-08-06 Thread Jacek Furmankiewicz

I was reading through the Lift book PDF and it mentions only REST-
style web services.

In our case, we need to look at re-implementing a set of existing SOAP
web services (is there anything like 'wsdl2scala' anywhere?).

I would appreciate any best practices and suggestions for implementing
SOAP web services in the context of a larger Lift app (and Scala in
general).

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: New features

2009-08-06 Thread glenn

Naftoli,

At the risk of discussing something obviously beyond my pay grade,
isn't the real issue Scala traits
and the use of parameterized types. The ManyToMany trait is defined
as:

trait ManyToMany[K,T:KeyedMapper[K, T]]

But this isn't really correct,is it, the parameter is too broad, and
that leads to a lot of the confusion and results in the need for
unnecessary documentation. When you think about it, why all the
duplication? Why do I need to
write my User entity as:

class User extends MegaProtoUser[User] with ManyToMany[Long,User]

when we all know that this would be much cleaner:

class User extends MegaProtoUser[User] with ManyToMany.

But traits aren't like interfaces. They have implementation and would
need to know something about
the parent class they are attached to - and how would you accomplish
that (reflection, maybe). This is
more a Scala issue than a Lift one, I think.

Glenn...


On Aug 5, 8:24 pm, Naftoli Gugenheim naftoli...@gmail.com wrote:
 Building causes a stack overflow?
 So the question is, is it the resident compiler or plain scalac also crashes? 
 Or just the presentation compiler? What do you see in the error log view or 
 file?
 I get compiler crashes very often when doing fancy mapper type related tricks.

 -

 glenngl...@exmbly.com wrote:

 Naftoli,

 Hate to do this to you, but I'm getting the following error using
 ManyToMany for Users to Roles:

 Message: java.lang.RuntimeException: Broken join
         scala.Predef$.error(Predef.scala:76)
         net.liftweb.mapper.ManyToMany$MappedManyToMany$$anonfun$children$1$
 $anonfun$apply$1.apply(ManyToMany.scala:54)
         net.liftweb.mapper.ManyToMany$MappedManyToMany$$anonfun$children$1$
 $anonfun$apply$1.apply(ManyToMany.scala:54)
         net.liftweb.util.EmptyBox.openOr(Box.scala:372)
         net.liftweb.mapper.ManyToMany$MappedManyToMany$$anonfun$children
 $1.apply(ManyToMany.scala:54)
         net.liftweb.mapper.ManyToMany$MappedManyToMany$$anonfun$children
 $1.apply(ManyToMany.scala:54)
         scala.List.map(List.scala:812)
         net.liftweb.mapper.ManyToMany$MappedManyToMany.children
 (ManyToMany.scala:54)
         net.liftweb.mapper.ManyToMany$MappedManyToMany.elements
 (ManyToMany.scala:96)
         scala.Seq$class.flatMap(Seq.scala:293)
         net.liftweb.mapper.ManyToMany$MappedManyToMany.flatMap
 (ManyToMany.scala:44)

  def edit(ns: NodeSeq): NodeSeq = {
     val theUser = view.entity
     val addRole = TheBindParam(insert, view.snippet.link(edit, ()
 = theUser.roles += new Role, Text(S?(Add Role

     bind(user, ns,
          firstname - text(theUser.firstName.is, theUser.firstName
 (_), (size,20)),
          lastname - text(theUser.lastName.is,theUser.lastName(_),
 (size, 30)),
          roles - theUser.roles.flatMap{role =
               bind(role, ns,
                   name - role.name.toForm,
                   remove - SHtml.submit(S?(Remove), ()=
 theUser.roles -= role)
               )
           },
          addRole,
          submit - SHtml.submit(S?(Save), ()=view.save)
          )
     }

 The offending code seems to be the line: roles -
 theUser.roles.flatMap{
 in the above bind method when I click on the addRole link.

 Here's my User class:

 class User extends MegaProtoUser[User] with ManyToMany[Long,User]{
   def getSingleton = User // what's the meta server

    object roles
     extends MappedManyToMany(UserRole, UserRole.user, UserRole.role,
 Role)

 }

 What am I doing wrong? You can see how difficult it is to slog through
 this code, let alone just
 trying to explain the problem so I can get help.

 On Aug 5, 9:57 am, Naftoli Gugenheim naftoli...@gmail.com wrote:

  I'll try.
  By the way, as per my correction, you can implement list the regular way 
  without ModelView, and just use ModelSnippet's load function in your edit 
  link or button, passing it the User instance.

  -

  glenngl...@exmbly.com wrote:

  Naftoli,

  I fixed my code per your comments and now I can edit and remove users
  from a list, as long as I populate the list with
  ModelView instances, as you said. As for the docs, this step was not
  clear to me at all. I just assumed that the list was
  just populated with User entities and the view in the ModelSnippet was
  instantiated with the selected User on each request.

  It sounds like your plate is pretty full, so I won't expect much, but
  sometime soon, could you provide an example, or improved
  docs, for using TableEditor and its related ItemsList trait.

  Thanks for all.

  Glenn...

  On Aug 5, 9:18 am, Naftoli Gugenheim naftoli...@gmail.com wrote:

   Correction: ModelSnippet.load takes the actual Mapper instance, not the 
   ModelView wrapper.

   -

   Naftoli Gugenheimnaftoli...@gmail.com wrote:

   To answer your immediate question, the listing should not refer to the 
   snippet's view but new ModelView instances for each 

[Lift] Re: Alternate part of view

2009-08-06 Thread Naftoli Gugenheim
Here's some view xhtml:

 req:noClient

label for=clientqueryClient /label

client:query id=clientquery size=5/

client:set /

/req:noClient

req:client

Client client:unset /

client:editclient:name //client:editbr /

client:details /

/req:client

hr /


And here's some snippet code:

 xhtml.bind(req,

  noClient - noClient _,

  client - hasClient _,

  ...

)

def noClient(xhtml: NodeSeq) = {

  var clientQuery: String = 

  def queryClient {

 ...

  }

  client match {

case None =

  xhtml.bind(client,

query - keepAttrs(SHtml.text(clientQuery, clientQuery = _)),

set - SHtml.submit(?(), ()=queryClient)

  )

case Some(_) =

  NodeSeq.Empty

  }

}


So both alternatives are always bound to a NodeSeq=NodeSeq function, and
both functions have to check if client is None or a Some, and always one
function returns NodeSeq.Empty and the other one something useful.
So my question is not, how can I do xxx, but, is there a 'DRY'er or more
concise way to do it.
In another place I used a slightly different technique:

 val emptyFn = (ns: NodeSeq) = NodeSeq.Empty

def noLocationKind = (ns: NodeSeq) = ...

def hasLocationKind(kind: LocKind#Value) = (ns:NodeSeq) = ...

ns.bind(nlt,

//name - {(ns:NodeSeq)=Text(foo)},

locKind - lkOpt.map(hasLocationKind).getOrElse(emptyFn),

noLocKind - (if(lkOpt==None) noLocationKind else emptyFn)

).bind(nlt,name-nlt.name.is)

Where lkOpt is the value that can be None or a Some. Instead of letting the
functions check None/Some, I check outside the function. But it still seems
that in theory it could be simplified.
chooseTemplate doesn't solve the problem that the alternative NodeSeq has to
be transformed to NodeSeq.Empty.
P.S. Notice that I'm using my implicit to call bind on the NodeSeq :)
P.P.S If you look closely, there's another problem that I had. For some
reason the first name - ... was getting ignored, and it only worked in
the second bind.
Thanks!





On Thu, Aug 6, 2009 at 10:49 AM, David Pollak feeder.of.the.be...@gmail.com
 wrote:

 I really need to see the resulting view code that you'd like to see
 depending on the conditions.

 On Thu, Aug 6, 2009 at 7:47 AM, Naftoli Gugenheim naftoli...@gmail.comwrote:


 No, I meant that this pattern of parts of the view being alternatives to
 each other repeats, in other words the view has several pairs of
 alternatives.


 I don't understand why the example doesn't allow for alternatives that
 repeat.




 -
 David Pollakfeeder.of.the.be...@gmail.com wrote:

 On Wed, Aug 5, 2009 at 8:44 PM, Naftoli Gugenheim naftoli...@gmail.com
 wrote:

 
  What's the smartest / most concise way to achieve the following in the
  corresponding view xhtml and snippet code:
  Parts of the view have to change, depending on whether something is set.
  For example, in the area where you select the client, if the client is
 None,
  then it displays an interface to select a client. If it's set to a Some
 then
  it displays the client's details with a button to unset it. This pattern
 is
  repeated.
  My current strategy is to have two elements, req:noClient and
 req:client,
  which have different xhtml contents. Then in the snippet I bind them to
 two
  NodeSeq functions, one that binds useful contents when the client is
 None
  and returns NodeSeq.Empty otherwise; and another function that binds
 when
  it's a Some and returns Empty otherwise. However, it seems to be
 somewhat
  redundant in theory.
  So does anyone have a better way of switching view parts?


 If it's repeated, then lift:embed / the part that you need.

 lift:MaybeClient
  client:yeslift:embed what=/templates/client_edit.html//client:yes
  client:nolift:embed what=/templates/client_chooser.html/client:no
 /lift:MaybeClient



 
  Thanks.
 
 
 
  
 


 --
 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







 --
 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 liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: New features

2009-08-06 Thread Naftoli Gugenheim
In your use case it can only be Long and User. But there has to be a type
parameter because other people might have a String key and a Request mapper.
And the contents of ManyToMany have to be type safe to enforce their
consistency with however the user of ManyToMany wants them to use it.So I
think what you want is that the compiler should figure out that since you're
using it with a KeyedMapper[Long, User], which is ManyToMany's T :
KeyedMapper[K,T], and ManyToMany extends KeyedMapper[K,T] and it has a self
type of T, and therefore it would be a compiler error to write anything
besides Long and User, therefore you must want to use Long and User and they
should be inferred.
I could certainly hear that, although I'm not much of a type theorist. So
feel free to open an enhancement ticket on Scala's Trac! :)
If I understood correctly...


On Thu, Aug 6, 2009 at 12:43 PM, glenn gl...@exmbly.com wrote:


 Naftoli,

 As I said at the outset, this is really beyond my expertise. But I
 think it's too
 broad and maybe, even unnecessary. In my example, K can only be one
 type,
 Long, and T can only be of type User. Anything else, and the compiler
 can't be
 guaranteed to catch it, but try running the application and you get
 things like
 stack overflow errors.

 How you would fix this is beyond me. All you can really do, at this
 point, is
 make sure to include these kinds of restrictions in the docs.

 Glenn...

 On Aug 6, 9:33 am, Naftoli Gugenheim naftoli...@gmail.com wrote:
  It's too broad, or it's too restrictive/unnecessary? I'm confused, you
 seem
  to imply both.If it's too broad, tell me why. But if you want to know why
 it
  needs the type parameter, it's because it has to use the type parameter
 in
  its implentation -- just count how many times its source code uses it!
 And
  if you want to know why the compiler can't infer it or be told to infer
  it... that's another issue.
  But if passing a type that creates a conflicting inheritance causes a
  compiler crash, that's not something I can help. :)
  Regards.
 
  On Thu, Aug 6, 2009 at 12:26 PM, glenn gl...@exmbly.com wrote:
 
   Naftoli,
 
   At the risk of discussing something obviously beyond my pay grade,
   isn't the real issue Scala traits
   and the use of parameterized types. The ManyToMany trait is defined
   as:
 
   trait ManyToMany[K,T:KeyedMapper[K, T]]
 
   But this isn't really correct,is it, the parameter is too broad, and
   that leads to a lot of the confusion and results in the need for
   unnecessary documentation. When you think about it, why all the
   duplication? Why do I need to
   write my User entity as:
 
   class User extends MegaProtoUser[User] with ManyToMany[Long,User]
 
   when we all know that this would be much cleaner:
 
   class User extends MegaProtoUser[User] with ManyToMany.
 
   But traits aren't like interfaces. They have implementation and would
   need to know something about
   the parent class they are attached to - and how would you accomplish
   that (reflection, maybe). This is
   more a Scala issue than a Lift one, I think.
 
   Glenn...
 
   On Aug 5, 8:24 pm, Naftoli Gugenheim naftoli...@gmail.com wrote:
Building causes a stack overflow?
So the question is, is it the resident compiler or plain scalac also
   crashes? Or just the presentation compiler? What do you see in the
 error log
   view or file?
I get compiler crashes very often when doing fancy mapper type
 related
   tricks.
 
-
 
glenngl...@exmbly.com wrote:
 
Naftoli,
 
Hate to do this to you, but I'm getting the following error using
ManyToMany for Users to Roles:
 
Message: java.lang.RuntimeException: Broken join
scala.Predef$.error(Predef.scala:76)
 
   net.liftweb.mapper.ManyToMany$MappedManyToMany$$anonfun$children$1$
$anonfun$apply$1.apply(ManyToMany.scala:54)
 
   net.liftweb.mapper.ManyToMany$MappedManyToMany$$anonfun$children$1$
$anonfun$apply$1.apply(ManyToMany.scala:54)
net.liftweb.util.EmptyBox.openOr(Box.scala:372)
   
 net.liftweb.mapper.ManyToMany$MappedManyToMany$$anonfun$children
$1.apply(ManyToMany.scala:54)
   
 net.liftweb.mapper.ManyToMany$MappedManyToMany$$anonfun$children
$1.apply(ManyToMany.scala:54)
scala.List.map(List.scala:812)
net.liftweb.mapper.ManyToMany$MappedManyToMany.children
(ManyToMany.scala:54)
net.liftweb.mapper.ManyToMany$MappedManyToMany.elements
(ManyToMany.scala:96)
scala.Seq$class.flatMap(Seq.scala:293)
net.liftweb.mapper.ManyToMany$MappedManyToMany.flatMap
(ManyToMany.scala:44)
 
 def edit(ns: NodeSeq): NodeSeq = {
val theUser = view.entity
val addRole = TheBindParam(insert, view.snippet.link(edit, ()
= theUser.roles += new Role, Text(S?(Add Role
 
bind(user, ns,
 firstname - text(theUser.firstName.is, theUser.firstName
(_), (size,20)),
 lastname - 

[Lift] Re: Db.addLogFunc

2009-08-06 Thread marius d.

Yeah we're aware of that. That is based on toString application which
is JDBC driver dependent. I think Derek started some work on this to
correct this behavior. Derek ?


Br's,
Marius

On Aug 6, 8:01 pm, jon jonhoff...@gmail.com wrote:
 Hi,

 I have the following in boot:
   DB.addLogFunc((query, len) = Log.info(The query: +query+ took
 +len+ milliseconds))

 I was expecting the query parameter to be sql, but it's actually some
 sort of guid

 INFO - The query: 6839c016-0122-f09a-9c96-003844e8 took 5
 milliseconds

 Any ideas?
 I'm running with derby.

 Thanks,

 Jon
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: New features

2009-08-06 Thread glenn

Naftoli,

As I said at the outset, this is really beyond my expertise. But I
think it's too
broad and maybe, even unnecessary. In my example, K can only be one
type,
Long, and T can only be of type User. Anything else, and the compiler
can't be
guaranteed to catch it, but try running the application and you get
things like
stack overflow errors.

How you would fix this is beyond me. All you can really do, at this
point, is
make sure to include these kinds of restrictions in the docs.

Glenn...

On Aug 6, 9:33 am, Naftoli Gugenheim naftoli...@gmail.com wrote:
 It's too broad, or it's too restrictive/unnecessary? I'm confused, you seem
 to imply both.If it's too broad, tell me why. But if you want to know why it
 needs the type parameter, it's because it has to use the type parameter in
 its implentation -- just count how many times its source code uses it! And
 if you want to know why the compiler can't infer it or be told to infer
 it... that's another issue.
 But if passing a type that creates a conflicting inheritance causes a
 compiler crash, that's not something I can help. :)
 Regards.

 On Thu, Aug 6, 2009 at 12:26 PM, glenn gl...@exmbly.com wrote:

  Naftoli,

  At the risk of discussing something obviously beyond my pay grade,
  isn't the real issue Scala traits
  and the use of parameterized types. The ManyToMany trait is defined
  as:

  trait ManyToMany[K,T:KeyedMapper[K, T]]

  But this isn't really correct,is it, the parameter is too broad, and
  that leads to a lot of the confusion and results in the need for
  unnecessary documentation. When you think about it, why all the
  duplication? Why do I need to
  write my User entity as:

  class User extends MegaProtoUser[User] with ManyToMany[Long,User]

  when we all know that this would be much cleaner:

  class User extends MegaProtoUser[User] with ManyToMany.

  But traits aren't like interfaces. They have implementation and would
  need to know something about
  the parent class they are attached to - and how would you accomplish
  that (reflection, maybe). This is
  more a Scala issue than a Lift one, I think.

  Glenn...

  On Aug 5, 8:24 pm, Naftoli Gugenheim naftoli...@gmail.com wrote:
   Building causes a stack overflow?
   So the question is, is it the resident compiler or plain scalac also
  crashes? Or just the presentation compiler? What do you see in the error log
  view or file?
   I get compiler crashes very often when doing fancy mapper type related
  tricks.

   -

   glenngl...@exmbly.com wrote:

   Naftoli,

   Hate to do this to you, but I'm getting the following error using
   ManyToMany for Users to Roles:

   Message: java.lang.RuntimeException: Broken join
           scala.Predef$.error(Predef.scala:76)

  net.liftweb.mapper.ManyToMany$MappedManyToMany$$anonfun$children$1$
   $anonfun$apply$1.apply(ManyToMany.scala:54)

  net.liftweb.mapper.ManyToMany$MappedManyToMany$$anonfun$children$1$
   $anonfun$apply$1.apply(ManyToMany.scala:54)
           net.liftweb.util.EmptyBox.openOr(Box.scala:372)
           net.liftweb.mapper.ManyToMany$MappedManyToMany$$anonfun$children
   $1.apply(ManyToMany.scala:54)
           net.liftweb.mapper.ManyToMany$MappedManyToMany$$anonfun$children
   $1.apply(ManyToMany.scala:54)
           scala.List.map(List.scala:812)
           net.liftweb.mapper.ManyToMany$MappedManyToMany.children
   (ManyToMany.scala:54)
           net.liftweb.mapper.ManyToMany$MappedManyToMany.elements
   (ManyToMany.scala:96)
           scala.Seq$class.flatMap(Seq.scala:293)
           net.liftweb.mapper.ManyToMany$MappedManyToMany.flatMap
   (ManyToMany.scala:44)

    def edit(ns: NodeSeq): NodeSeq = {
       val theUser = view.entity
       val addRole = TheBindParam(insert, view.snippet.link(edit, ()
   = theUser.roles += new Role, Text(S?(Add Role

       bind(user, ns,
            firstname - text(theUser.firstName.is, theUser.firstName
   (_), (size,20)),
            lastname - text(theUser.lastName.is,theUser.lastName(_),
   (size, 30)),
            roles - theUser.roles.flatMap{role =
                 bind(role, ns,
                     name - role.name.toForm,
                     remove - SHtml.submit(S?(Remove), ()=
   theUser.roles -= role)
                 )
             },
            addRole,
            submit - SHtml.submit(S?(Save), ()=view.save)
            )
       }

   The offending code seems to be the line: roles -
   theUser.roles.flatMap{
   in the above bind method when I click on the addRole link.

   Here's my User class:

   class User extends MegaProtoUser[User] with ManyToMany[Long,User]{
     def getSingleton = User // what's the meta server

      object roles
       extends MappedManyToMany(UserRole, UserRole.user, UserRole.role,
   Role)

   }

   What am I doing wrong? You can see how difficult it is to slog through
   this code, let alone just
   trying to explain the problem so I can get help.

   On Aug 5, 9:57 am, Naftoli 

[Lift] Re: Title function

2009-08-06 Thread Naftoli Gugenheim
Are you showing me a way for Title to access this information? In this case
Info is the original snippet class? Is this a way to access Info.title
outside of the instance of Info?
What would be ideal, at least in a certain sense, is if there would be some
way for the Loc to access the snippet instance and/or modify the transformed
xml that it is about to serve.
The next best option would be for all the title snippets to pass their
calculated title through some global (object/module) method so that the
snippets would generate their specific title and have the title modified in
a global way too.
The simplest option is just to repeat the common title code everywhere.

On Thu, Aug 6, 2009 at 10:15 AM, Derek Chen-Becker dchenbec...@gmail.comwrote:

 Putting it in an object won't work, since you probably want the title to
 be done per-request.  To clarify what I'm saying, here's a small example of
 how I would set the title for an edit page:

 First, the template:

 lift:surround at=content
   head
 titlelift:Info.title //title
   /head

   lift:Info.edit form=POST 
 h1Type stuff here:/h1
 edit:stuff /
 input type=submit value=Save /
   /lift:Info.edit
 /lift:surround

 Then the snippet class:

 class Info {
   object toEdit extends RequestVar[Box[InfoStuff]](Empty)

   def title(ignore : NodeSeq) : NodeSeq = Text(toEdit map (Edit  +
 _.name) openOr No item to edit!)

   def edit (xhtml : NodeSeq) : NodeSeq = ...
 }

 This assumes that whatever page is redirecting to the edit page will set
 the RequestVar, something like:

 S.redirectTo(/edit, () = Info.toEdit(Full(someInfoStuffInstance)))

 Does that make sense?

 Derek


 On Wed, Aug 5, 2009 at 11:14 AM, Naftoli Gugenheim 
 naftoli...@gmail.comwrote:


 You mean the snippet should put its new/edit flag somewhere that the Title
 can read, like a top level object? Then it doesn't need to be an AnyVar
 because it can be set on every request, if Title is processed after the
 snippet in each request--and if not then I don't see how a RequestVar etc.
 would work.
 Seems like it may be more work than the other way, though.
 By the way I sent corrected message afterward--my question was not about
 LocParams but of the items of type ParamType.

 -
 Derek Chen-Beckerdchenbec...@gmail.com wrote:

 If you're just looking for a way to programmatically set the title,
 getting
 into LocParam might be a little bit of overkill. It's probably simpler to
 set up your own SessionVars or RequestVars and access them from the Title
 closure:


 http://scala-tools.org/scaladocs/liftweb/1.0/net/liftweb/sitemap/Loc/Title.html

 Derek

 On Wed, Aug 5, 2009 at 9:45 AM, Naftoli Gugenheim naftoli...@gmail.com
 wrote:

 
 
  -
  Naftoli Gugenheimnaftoli...@gmail.com wrote:
 
  So what I'm not clear on now is the input to Title. What is a LocParam,
 and
  how do you you use loc params? What is forceParam, defaultParams, param,
 and
  foundParam? And in any case how can Title know the value of the
 registered
  StatefulSnippet's newOrEdit state?
  Thanks!
 
  -
  David Pollakfeeder.of.the.be...@gmail.com wrote:
 
  On Tue, Aug 4, 2009 at 12:47 PM, Naftoli Gugenheim 
 naftoli...@gmail.com
  wrote:
 
   Maybe my setup is atypical then :)
   My default.html is does not have a title tag; instead each view has
 its
   own, relying on head merge.
   I don't know if originally I had it in default using lift:Menu.title
 or
   not, but the difficulty with that would be that some pages can be used
 to
   edit or add a new item, and the title needs to reflect that.
 
 
  Because the Title() case class takes a function, you can have it do all
  forms of stuff including looking to the current user, whether you're
  editing, and do the right thing.
 
 
  
   So either (1) I need a way that the value of Menu.title will depend on
  data
   in various StatefulSnippets; or (2) make the title ambiguous (add/edit
   neutral); or (3) leave the titles in the views and process them with a
   function somehow; or (4) put a snippet in the title of every view to
 get
  the
   user.
  
  
  
   -
   David Pollakfeeder.of.the.be...@gmail.com wrote:
  
   On Sun, Aug 2, 2009 at 4:35 PM, Naftoli Gugenheim 
 naftoli...@gmail.com
   wrote:
  
   
How does the Title LocParam work?
  
  
   The Title case class has a function that converts the current object
   associated with the Loc into a String representing the title of the
 page
   represented by the Loc.
  
  
   
Is there a way to modify all titles to e.g. include the logged in
  user's
name, without having to edit all the views?
  
  
   The title tag is typically defined in the default template.  You
 could
   include a snippet in the title tag that would contain the user's
 name.
   I
   would see this as separate from the title of the specific page
 referred
  to
   by the Loc.Title.
  
  
   
  

[Lift] How do I create a function that takes MetaMappers?

2009-08-06 Thread jon

I'd like to do something like

 def findAll[T : LongKeyedMapper[T],M : LongKeyedMetaMapper[T]]
(metaObject: M): List[T] = {
   metaObject.findAll
 }

 val users:List[User] = findAll(User)
 val foos:List[Foo] = findAll(Foo)

But the compiler won't have it.

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: Db.addLogFunc

2009-08-06 Thread Derek Chen-Becker
Well, I started looking at it and determined that the only way for us to
truly log the queries would be to essentially make our own wrappers over
Statement and PreparedStatement. There are projects (log4jdbc, notably) that
already do this, and in a transparent manner. I'm not sure that adding a
whole bunch of SQL logging directly to Lift is better than leveraging some
existing libraries to do it.

Derek

On Thu, Aug 6, 2009 at 11:03 AM, marius d. marius.dan...@gmail.com wrote:


 Yeah we're aware of that. That is based on toString application which
 is JDBC driver dependent. I think Derek started some work on this to
 correct this behavior. Derek ?


 Br's,
 Marius

 On Aug 6, 8:01 pm, jon jonhoff...@gmail.com wrote:
  Hi,
 
  I have the following in boot:
DB.addLogFunc((query, len) = Log.info(The query: +query+ took
  +len+ milliseconds))
 
  I was expecting the query parameter to be sql, but it's actually some
  sort of guid
 
  INFO - The query: 6839c016-0122-f09a-9c96-003844e8 took 5
  milliseconds
 
  Any ideas?
  I'm running with derby.
 
  Thanks,
 
  Jon
 


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: SOAP web services?

2009-08-06 Thread Derek Chen-Becker
As far as I know there aren't any Scala-specific SOAP libs, so it's probably
simplest to use on of the Java ones to create the stubs and then just use
those from Scala. If I'm wrong and there are some Scala SOAP libs out there,
I'd love to know about them.

Derek

On Thu, Aug 6, 2009 at 9:26 AM, Jacek Furmankiewicz jace...@gmail.comwrote:


 I was reading through the Lift book PDF and it mentions only REST-
 style web services.

 In our case, we need to look at re-implementing a set of existing SOAP
 web services (is there anything like 'wsdl2scala' anywhere?).

 I would appreciate any best practices and suggestions for implementing
 SOAP web services in the context of a larger Lift app (and Scala in
 general).

 


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: How do I create a function that takes MetaMappers?

2009-08-06 Thread Ross Mellgren

What complaint does the compiler have?

-Ross

On Aug 6, 2009, at 2:06 PM, jon wrote:


 I'd like to do something like

 def findAll[T : LongKeyedMapper[T],M : LongKeyedMetaMapper[T]]
 (metaObject: M): List[T] = {
   metaObject.findAll
 }

 val users:List[User] = findAll(User)
 val foos:List[Foo] = findAll(Foo)

 But the compiler won't have it.

 


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: Db.addLogFunc

2009-08-06 Thread marius d.

Probably building our own wrappers would be more lightweight then 3-rd
party. Jus' guessing

Br's,
Marius

On Aug 6, 9:58 pm, Derek Chen-Becker dchenbec...@gmail.com wrote:
 Well, I started looking at it and determined that the only way for us to
 truly log the queries would be to essentially make our own wrappers over
 Statement and PreparedStatement. There are projects (log4jdbc, notably) that
 already do this, and in a transparent manner. I'm not sure that adding a
 whole bunch of SQL logging directly to Lift is better than leveraging some
 existing libraries to do it.

 Derek

 On Thu, Aug 6, 2009 at 11:03 AM, marius d. marius.dan...@gmail.com wrote:

  Yeah we're aware of that. That is based on toString application which
  is JDBC driver dependent. I think Derek started some work on this to
  correct this behavior. Derek ?

  Br's,
  Marius

  On Aug 6, 8:01 pm, jon jonhoff...@gmail.com wrote:
   Hi,

   I have the following in boot:
     DB.addLogFunc((query, len) = Log.info(The query: +query+ took
   +len+ milliseconds))

   I was expecting the query parameter to be sql, but it's actually some
   sort of guid

   INFO - The query: 6839c016-0122-f09a-9c96-003844e8 took 5
   milliseconds

   Any ideas?
   I'm running with derby.

   Thanks,

   Jon
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: How do I create a function that takes MetaMappers?

2009-08-06 Thread Naftoli Gugenheim

Pull M out as a type parameter and just declare the value parameter to be 
whatever M means.

-
Ross Mellgrendri...@gmail.com wrote:


What complaint does the compiler have?

-Ross

On Aug 6, 2009, at 2:06 PM, jon wrote:


 I'd like to do something like

 def findAll[T : LongKeyedMapper[T],M : LongKeyedMetaMapper[T]]
 (metaObject: M): List[T] = {
   metaObject.findAll
 }

 val users:List[User] = findAll(User)
 val foos:List[Foo] = findAll(Foo)

 But the compiler won't have it.

 




--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] SiteMap gives No Navigation Defined.

2009-08-06 Thread pabraham

Hello there,

I've been looking at SiteMap and trying to get it to give me a page
title, based on the SiteMap section in the Lift book (PDF version).
Here's how I've tried.

Boot.scala

// Build SiteMap
val entries = Menu(Loc(Home, index::Nil, Home)) :: Nil
LiftRules.setSiteMap(SiteMap(entries:_*))

default.html

head
...
titleLift:Menu.title//title
...
/head
body
...
lift:Menu.builder li_item:class=active/

This works fine, and gives me Home as the title of my page.

Now I actually want a different title, so I change the Loc bit to Loc
(abcdefg, index::Nil, Home) and get No Navigation Defined.

What am I doing wrong here?

Paul.

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: How do I create a function that takes MetaMappers?

2009-08-06 Thread jon

val users:List[User] = findAll(User)
-- inferred type arguments [Nothing,object com.x.lift.model.User] do
not conform to method findAll's type parameter bounds [T :
net.liftweb.mapper.LongKeyedMapper[T],M :
 net.liftweb.mapper.LongKeyedMetaMapper[T]]

if i change to:
val users:List[User] = findAll[User,User](User)
-- type arguments [com.x.lift.model.User,com.x.lift.model.User] do
not conform to method findAll's type parameter bounds [T :
net.liftweb.mapper.LongKeyedMapper[T],M :
 net.liftweb.mapper.LongKeyedMetaMapper[T]]

thanks,

jon

On Aug 6, 3:12 pm, Ross Mellgren dri...@gmail.com wrote:
 What complaint does the compiler have?

 -Ross

 On Aug 6, 2009, at 2:06 PM, jon wrote:





  I'd like to do something like

      def findAll[T : LongKeyedMapper[T],M : LongKeyedMetaMapper[T]]
  (metaObject: M): List[T] = {
        metaObject.findAll
      }

      val users:List[User] = findAll(User)
      val foos:List[Foo] = findAll(Foo)

  But the compiler won't have it.

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: SiteMap gives No Navigation Defined.

2009-08-06 Thread Naftoli Gugenheim

Not sure why you're getting no nav, but I think you want to change the other 
Home - the first string is the id of the link.

-
pabrahampaulabraham...@googlemail.com wrote:


Hello there,

I've been looking at SiteMap and trying to get it to give me a page
title, based on the SiteMap section in the Lift book (PDF version).
Here's how I've tried.

Boot.scala

// Build SiteMap
val entries = Menu(Loc(Home, index::Nil, Home)) :: Nil
LiftRules.setSiteMap(SiteMap(entries:_*))

default.html

head
...
titleLift:Menu.title//title
...
/head
body
...
lift:Menu.builder li_item:class=active/

This works fine, and gives me Home as the title of my page.

Now I actually want a different title, so I change the Loc bit to Loc
(abcdefg, index::Nil, Home) and get No Navigation Defined.

What am I doing wrong here?

Paul.



--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: How do I create a function that takes MetaMappers?

2009-08-06 Thread jon

Thanks Naftoli,

is this what you mean?

 def findAll[T : LongKeyedMapper[T]] (metaObject:
LongKeyedMetaMapper[T]): List[T] = {
   metaObject.findAll
 }
 **val users:List[User] = findAll[User](User)

still get **- type arguments [com.udorse.lift.model.User] do not
conform to method findAll's type parameter bounds [T :
net.liftweb.mapper.LongKeyedMapper[T]]

On Aug 6, 3:30 pm, Naftoli Gugenheim naftoli...@gmail.com wrote:
 Pull M out as a type parameter and just declare the value parameter to be 
 whatever M means.

 -

 Ross Mellgrendri...@gmail.com wrote:

 What complaint does the compiler have?

 -Ross

 On Aug 6, 2009, at 2:06 PM, jon wrote:





  I'd like to do something like

      def findAll[T : LongKeyedMapper[T],M : LongKeyedMetaMapper[T]]
  (metaObject: M): List[T] = {
        metaObject.findAll
      }

      val users:List[User] = findAll(User)
      val foos:List[Foo] = findAll(Foo)

  But the compiler won't have it.

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: How do I create a function that takes MetaMappers?

2009-08-06 Thread Ross Mellgren

Naftoli's suggestion is good, but I think your problem now is that  
User is not : LongKeyedMapper, it's : KeyedMapper. Here's one that  
compiles:

object Test {
 def findAll[T](m: KeyedMetaMapper[_, T]) = m.findAll

 def test {
 val users: List[User] = findAll(User)
 users
 }
}

On Aug 6, 2009, at 3:39 PM, jon wrote:


 Thanks Naftoli,

 is this what you mean?

 def findAll[T : LongKeyedMapper[T]] (metaObject:
 LongKeyedMetaMapper[T]): List[T] = {
   metaObject.findAll
 }
 **val users:List[User] = findAll[User](User)

 still get **- type arguments [com.udorse.lift.model.User] do not
 conform to method findAll's type parameter bounds [T :
 net.liftweb.mapper.LongKeyedMapper[T]]

 On Aug 6, 3:30 pm, Naftoli Gugenheim naftoli...@gmail.com wrote:
 Pull M out as a type parameter and just declare the value parameter  
 to be whatever M means.

 -

 Ross Mellgrendri...@gmail.com wrote:

 What complaint does the compiler have?

 -Ross

 On Aug 6, 2009, at 2:06 PM, jon wrote:





 I'd like to do something like

 def findAll[T : LongKeyedMapper[T],M : LongKeyedMetaMapper[T]]
 (metaObject: M): List[T] = {
   metaObject.findAll
 }

 val users:List[User] = findAll(User)
 val foos:List[Foo] = findAll(Foo)

 But the compiler won't have it.

 


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: SiteMap gives No Navigation Defined.

2009-08-06 Thread pabraham

Same thing happens, i.e. I get No Navigation Defined. and no title.

On 6 Aug, 20:38, Naftoli Gugenheim naftoli...@gmail.com wrote:
 Not sure why you're getting no nav, but I think you want to change the other 
 Home - the first string is the id of the link.

 -

 pabrahampaulabraham...@googlemail.com wrote:

 Hello there,

 I've been looking at SiteMap and trying to get it to give me a page
 title, based on the SiteMap section in the Lift book (PDF version).
 Here's how I've tried.

 Boot.scala

     // Build SiteMap
     val entries = Menu(Loc(Home, index::Nil, Home)) :: Nil
     LiftRules.setSiteMap(SiteMap(entries:_*))

 default.html

     head
         ...
         titleLift:Menu.title//title
         ...
     /head
     body
         ...
         lift:Menu.builder li_item:class=active/

 This works fine, and gives me Home as the title of my page.

 Now I actually want a different title, so I change the Loc bit to Loc
 (abcdefg, index::Nil, Home) and get No Navigation Defined.

 What am I doing wrong here?

 Paul.

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: SiteMap gives No Navigation Defined.

2009-08-06 Thread TylerWeir

No Nav Defined typically shows up for me, when I've got my DB
connection messed up.



On Aug 6, 3:51 pm, pabraham paulabraham...@googlemail.com wrote:
 Same thing happens, i.e. I get No Navigation Defined. and no title.

 On 6 Aug, 20:38, Naftoli Gugenheim naftoli...@gmail.com wrote:



  Not sure why you're getting no nav, but I think you want to change the 
  other Home - the first string is the id of the link.

  -

  pabrahampaulabraham...@googlemail.com wrote:

  Hello there,

  I've been looking at SiteMap and trying to get it to give me a page
  title, based on the SiteMap section in the Lift book (PDF version).
  Here's how I've tried.

  Boot.scala

      // Build SiteMap
      val entries = Menu(Loc(Home, index::Nil, Home)) :: Nil
      LiftRules.setSiteMap(SiteMap(entries:_*))

  default.html

      head
          ...
          titleLift:Menu.title//title
          ...
      /head
      body
          ...
          lift:Menu.builder li_item:class=active/

  This works fine, and gives me Home as the title of my page.

  Now I actually want a different title, so I change the Loc bit to Loc
  (abcdefg, index::Nil, Home) and get No Navigation Defined.

  What am I doing wrong here?

  Paul.
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Rendering dynamic templates

2009-08-06 Thread fbettag

Hi there,

i was just wondering how one would go about dynamifying templates?
Atm i store them on disk.

Is there any way to parse a template and execute all the lift:MyStuff
in that template?
Like Xml.load but the way lift does it to render stuff in it.

I tried to find it in code but didn't succeed.
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: SiteMap gives No Navigation Defined.

2009-08-06 Thread pabraham

Actually, same thing doesn't happen.  If I change the third argument,
I get this as the title in my browser as well as the link in the site
map.

On 6 Aug, 20:51, pabraham paulabraham...@googlemail.com wrote:
 Same thing happens, i.e. I get No Navigation Defined. and no title.

 On 6 Aug, 20:38, Naftoli Gugenheim naftoli...@gmail.com wrote:

  Not sure why you're getting no nav, but I think you want to change the 
  other Home - the first string is the id of the link.

  -

  pabrahampaulabraham...@googlemail.com wrote:

  Hello there,

  I've been looking at SiteMap and trying to get it to give me a page
  title, based on the SiteMap section in the Lift book (PDF version).
  Here's how I've tried.

  Boot.scala

      // Build SiteMap
      val entries = Menu(Loc(Home, index::Nil, Home)) :: Nil
      LiftRules.setSiteMap(SiteMap(entries:_*))

  default.html

      head
          ...
          titleLift:Menu.title//title
          ...
      /head
      body
          ...
          lift:Menu.builder li_item:class=active/

  This works fine, and gives me Home as the title of my page.

  Now I actually want a different title, so I change the Loc bit to Loc
  (abcdefg, index::Nil, Home) and get No Navigation Defined.

  What am I doing wrong here?

  Paul.

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: Rendering dynamic templates

2009-08-06 Thread marius d.

Please see LiftSession.processSurroundAndInclude ...

I wouldn't recommend processing templates outside normal rendering
pipeline ... but for specific cases it might be ok.

But what is your use case?

Br's,
Marius

On Aug 6, 11:12 pm, fbettag fr...@bett.ag wrote:
 Hi there,

 i was just wondering how one would go about dynamifying templates?
 Atm i store them on disk.

 Is there any way to parse a template and execute all the lift:MyStuff
 in that template?
 Like Xml.load but the way lift does it to render stuff in it.

 I tried to find it in code but didn't succeed.
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: Eclipse setup

2009-08-06 Thread Steffen Weißmann

 You have two output folders: the Scala IDE = 2.7.5.final only
 supports one. Use a single default output folder.
That helped somehow, at least in the Boot.scala file it was pretty
much ok. But the other files were no better. For instance, clicking on
MetaProtoUser still opens Object.java source...

 You also have source directories nested below the top level of your
 project. Although I've seen reports that this works from various
 people, there's code in 2.7.5.final and earlier which makes this
 unlikely. If switching to a single output folder doesn't solve your
 problems try also moving your source directories to the top level.
I tried to move the scala src folder src/main/scala to the project
root, but that didn't improve things.

I really would like to use eclipse, but right now i am using idea
(even though I completely agree with David Pollaks blog posts...)
since it usually understands the scala source code and it usually
displays the lift code (and also other code) properly.

I guess several people are developing lift projects with eclipse, so I
hope there is a chance to get it working. Is there any configuration
(Eclipse version+plugin versions+project setup) that is known to work?

 Both of these issues are fixed on trunk (but don't go there unless
 you're using the Lift 2.8.0 branch).
Unfortunately it didn't help to avoid these two issues...

 Let me know how you get on ...
Well, I switched to idea for now, and i don't like it. Would it make
sense to use the trunk version?

Cheers, Steffen.


 Cheers,


 Miles

 --
 Miles Sabin
 tel: +44 (0)7813 944 528
 skype:  milessabin
 http://www.chuusai.com/
 http://twitter.com/milessabin

 




-- 
Steffen Weissmann

Technische Universitaet Berlin - Math. Department - MA 3-2

Str. des 17. Juni 136
10623 Berlin - Germany

Phone: +49 30 314-29278
Mail: weissm...@math.tu-berlin.de
Web: www.math.tu-berlin.de/~weissman

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: Db.addLogFunc

2009-08-06 Thread Derek Chen-Becker
If there's a consensus that we want our own JDBC wrappers I'll go ahead and
write them.

Derek

On Thu, Aug 6, 2009 at 1:19 PM, marius d. marius.dan...@gmail.com wrote:


 Probably building our own wrappers would be more lightweight then 3-rd
 party. Jus' guessing

 Br's,
 Marius

 On Aug 6, 9:58 pm, Derek Chen-Becker dchenbec...@gmail.com wrote:
  Well, I started looking at it and determined that the only way for us to
  truly log the queries would be to essentially make our own wrappers over
  Statement and PreparedStatement. There are projects (log4jdbc, notably)
 that
  already do this, and in a transparent manner. I'm not sure that adding a
  whole bunch of SQL logging directly to Lift is better than leveraging
 some
  existing libraries to do it.
 
  Derek
 
  On Thu, Aug 6, 2009 at 11:03 AM, marius d. marius.dan...@gmail.com
 wrote:
 
   Yeah we're aware of that. That is based on toString application which
   is JDBC driver dependent. I think Derek started some work on this to
   correct this behavior. Derek ?
 
   Br's,
   Marius
 
   On Aug 6, 8:01 pm, jon jonhoff...@gmail.com wrote:
Hi,
 
I have the following in boot:
  DB.addLogFunc((query, len) = Log.info(The query: +query+ took
+len+ milliseconds))
 
I was expecting the query parameter to be sql, but it's actually some
sort of guid
 
INFO - The query: 6839c016-0122-f09a-9c96-003844e8 took 5
milliseconds
 
Any ideas?
I'm running with derby.
 
Thanks,
 
Jon
 


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: Eclipse setup

2009-08-06 Thread Miles Sabin

On Thu, Aug 6, 2009 at 9:44 PM, Steffen
Weißmannsteffen.weissm...@googlemail.com wrote:
 I guess several people are developing lift projects with eclipse, so I
 hope there is a chance to get it working. Is there any configuration
 (Eclipse version+plugin versions+project setup) that is known to work?

There are these documents,

  http://lampsvn.epfl.ch/trac/scala/wiki/ScalaEclipseMaven
  http://lampsvn.epfl.ch/trac/scala/wiki/ScalaEclipseLift

which have been contributed by Lift/Eclipse users. I can't vouch for
their accuracy or completeness I'm afraid.

Cheers,


Miles

-- 
Miles Sabin
tel: +44 (0)7813 944 528
skype:  milessabin
http://www.chuusai.com/
http://twitter.com/milessabin

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: SiteMap gives No Navigation Defined.

2009-08-06 Thread Derek Chen-Becker
So it's working correctly, or it's still broken? same thing doesn't happen
is a bit unclear ;)

Derek

On Thu, Aug 6, 2009 at 1:56 PM, pabraham paulabraham...@googlemail.comwrote:


 Actually, same thing doesn't happen.  If I change the third argument,
 I get this as the title in my browser as well as the link in the site
 map.

 On 6 Aug, 20:51, pabraham paulabraham...@googlemail.com wrote:
  Same thing happens, i.e. I get No Navigation Defined. and no title.
 
  On 6 Aug, 20:38, Naftoli Gugenheim naftoli...@gmail.com wrote:
 
   Not sure why you're getting no nav, but I think you want to change the
 other Home - the first string is the id of the link.
 
   -
 
   pabrahampaulabraham...@googlemail.com wrote:
 
   Hello there,
 
   I've been looking at SiteMap and trying to get it to give me a page
   title, based on the SiteMap section in the Lift book (PDF version).
   Here's how I've tried.
 
   Boot.scala
 
   // Build SiteMap
   val entries = Menu(Loc(Home, index::Nil, Home)) :: Nil
   LiftRules.setSiteMap(SiteMap(entries:_*))
 
   default.html
 
   head
   ...
   titleLift:Menu.title//title
   ...
   /head
   body
   ...
   lift:Menu.builder li_item:class=active/
 
   This works fine, and gives me Home as the title of my page.
 
   Now I actually want a different title, so I change the Loc bit to Loc
   (abcdefg, index::Nil, Home) and get No Navigation Defined.
 
   What am I doing wrong here?
 
   Paul.

 


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: Rendering dynamic templates

2009-08-06 Thread Derek Chen-Becker
It might be nice to make template loading configurable. Currently,
TemplateFinder is used to load templates and it, in turn, uses
LiftRules.finder to locate a resource by name from the classloader. I think
that we could add a layer of indirection there to allow someone to use a
partial function to determine where a template is loaded from, and provide a
default impl that represents the current behavior. I'm thinking something
like

PartialFunction[(List[String],String),Box[NodeSeq]]

One possible use would be for something like a CMS, with the template stored
in a database. Thoughts?

Derek

where List[String] is the template path and the second String is the ISO
Language code.

On Thu, Aug 6, 2009 at 2:12 PM, fbettag fr...@bett.ag wrote:


 Hi there,

 i was just wondering how one would go about dynamifying templates?
 Atm i store them on disk.

 Is there any way to parse a template and execute all the lift:MyStuff
 in that template?
 Like Xml.load but the way lift does it to render stuff in it.

 I tried to find it in code but didn't succeed.
 


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: Rendering dynamic templates

2009-08-06 Thread fbettag

The CMS is my exactly my usecase. I'll try my luck with
processSurroundAndInclude.

On Aug 6, 11:07 pm, Derek Chen-Becker dchenbec...@gmail.com wrote:
 It might be nice to make template loading configurable. Currently,
 TemplateFinder is used to load templates and it, in turn, uses
 LiftRules.finder to locate a resource by name from the classloader. I think
 that we could add a layer of indirection there to allow someone to use a
 partial function to determine where a template is loaded from, and provide a
 default impl that represents the current behavior. I'm thinking something
 like

 PartialFunction[(List[String],String),Box[NodeSeq]]

 One possible use would be for something like a CMS, with the template stored
 in a database. Thoughts?

 Derek

 where List[String] is the template path and the second String is the ISO
 Language code.



 On Thu, Aug 6, 2009 at 2:12 PM, fbettag fr...@bett.ag wrote:

  Hi there,

  i was just wondering how one would go about dynamifying templates?
  Atm i store them on disk.

  Is there any way to parse a template and execute all the lift:MyStuff
  in that template?
  Like Xml.load but the way lift does it to render stuff in it.

  I tried to find it in code but didn't succeed.
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] StatefulSnippet link and functionMap

2009-08-06 Thread glenn

I have a stateful snippet with multiple StatefulSnippet links in the
bind helper. Clicking on each link gives me a
403 error. I noticed that the function map for each link is different.
Shouldn't they be the same, since I'm trying to reload the same page
as the one the link is on?

Glenn...
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: Rendering dynamic templates

2009-08-06 Thread fbettag

marius, do you have any idea what i could pass lift:surround's with=
attribute?

On Aug 6, 11:31 pm, fbettag fr...@bett.ag wrote:
 The CMS is my exactly my usecase. I'll try my luck with
 processSurroundAndInclude.

 On Aug 6, 11:07 pm, Derek Chen-Becker dchenbec...@gmail.com wrote:



  It might be nice to make template loading configurable. Currently,
  TemplateFinder is used to load templates and it, in turn, uses
  LiftRules.finder to locate a resource by name from the classloader. I think
  that we could add a layer of indirection there to allow someone to use a
  partial function to determine where a template is loaded from, and provide a
  default impl that represents the current behavior. I'm thinking something
  like

  PartialFunction[(List[String],String),Box[NodeSeq]]

  One possible use would be for something like a CMS, with the template stored
  in a database. Thoughts?

  Derek

  where List[String] is the template path and the second String is the ISO
  Language code.

  On Thu, Aug 6, 2009 at 2:12 PM, fbettag fr...@bett.ag wrote:

   Hi there,

   i was just wondering how one would go about dynamifying templates?
   Atm i store them on disk.

   Is there any way to parse a template and execute all the lift:MyStuff
   in that template?
   Like Xml.load but the way lift does it to render stuff in it.

   I tried to find it in code but didn't succeed.
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: StatefulSnippet link and functionMap

2009-08-06 Thread Naftoli Gugenheim

No, because links have associated functions.

-
glenngl...@exmbly.com wrote:


I have a stateful snippet with multiple StatefulSnippet links in the
bind helper. Clicking on each link gives me a
403 error. I noticed that the function map for each link is different.
Shouldn't they be the same, since I'm trying to reload the same page
as the one the link is on?

Glenn...


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: Eclipse setup

2009-08-06 Thread Jonathan A Ferguson

See if the following configuration helps you as it solved most of my  
problems.


http://blog.spiralarm.com/richard/2009/07/using-existing-scala-maven-project-in.html


Cheers
Jono


On 07/08/2009, at 6:44 AM, Steffen Weißmann wrote:


 You have two output folders: the Scala IDE = 2.7.5.final only
 supports one. Use a single default output folder.
 That helped somehow, at least in the Boot.scala file it was pretty
 much ok. But the other files were no better. For instance, clicking on
 MetaProtoUser still opens Object.java source...

 You also have source directories nested below the top level of your
 project. Although I've seen reports that this works from various
 people, there's code in 2.7.5.final and earlier which makes this
 unlikely. If switching to a single output folder doesn't solve your
 problems try also moving your source directories to the top level.
 I tried to move the scala src folder src/main/scala to the project
 root, but that didn't improve things.

 I really would like to use eclipse, but right now i am using idea
 (even though I completely agree with David Pollaks blog posts...)
 since it usually understands the scala source code and it usually
 displays the lift code (and also other code) properly.

 I guess several people are developing lift projects with eclipse, so I
 hope there is a chance to get it working. Is there any configuration
 (Eclipse version+plugin versions+project setup) that is known to work?

 Both of these issues are fixed on trunk (but don't go there unless
 you're using the Lift 2.8.0 branch).
 Unfortunately it didn't help to avoid these two issues...

 Let me know how you get on ...
 Well, I switched to idea for now, and i don't like it. Would it make
 sense to use the trunk version?

 Cheers, Steffen.


 Cheers,


 Miles

 --
 Miles Sabin
 tel: +44 (0)7813 944 528
 skype:  milessabin
 http://www.chuusai.com/
 http://twitter.com/milessabin






 -- 
 Steffen Weissmann

 Technische Universitaet Berlin - Math. Department - MA 3-2

 Str. des 17. Juni 136
 10623 Berlin - Germany

 Phone: +49 30 314-29278
 Mail: weissm...@math.tu-berlin.de
 Web: www.math.tu-berlin.de/~weissman

 


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: Rendering dynamic templates

2009-08-06 Thread fbettag

def render(inContentid: String): LiftResponse = {
val content = Content.find(By(Content.id, inContentid.toLong)) 
match
{
case Full(obj) = obj
case _ = return NotFoundResponse()
}

val layout = Layout.find(By(Layout.id, content.layout)) match {
case Full(obj) = obj
case _ = return NotFoundResponse()
}

val sess = S.session match {
case Full(obj: LiftSession) = obj
case _ = return InternalServerErrorResponse()
}

val res = sess.processSurroundAndInclude(
layout.layout,
  lift:surround at=content

p{XML.loadString(content.content)}/p
  /lift:surround
)

XhtmlResponse(res.first, Empty, Nil, Nil, 200, true)
}


this works very nicely!


On Aug 7, 12:18 am, fbettag fr...@bett.ag wrote:
 marius, do you have any idea what i could pass lift:surround's with=
 attribute?

 On Aug 6, 11:31 pm, fbettag fr...@bett.ag wrote:



  The CMS is my exactly my usecase. I'll try my luck with
  processSurroundAndInclude.

  On Aug 6, 11:07 pm, Derek Chen-Becker dchenbec...@gmail.com wrote:

   It might be nice to make template loading configurable. Currently,
   TemplateFinder is used to load templates and it, in turn, uses
   LiftRules.finder to locate a resource by name from the classloader. I 
   think
   that we could add a layer of indirection there to allow someone to use a
   partial function to determine where a template is loaded from, and 
   provide a
   default impl that represents the current behavior. I'm thinking something
   like

   PartialFunction[(List[String],String),Box[NodeSeq]]

   One possible use would be for something like a CMS, with the template 
   stored
   in a database. Thoughts?

   Derek

   where List[String] is the template path and the second String is the ISO
   Language code.

   On Thu, Aug 6, 2009 at 2:12 PM, fbettag fr...@bett.ag wrote:

Hi there,

i was just wondering how one would go about dynamifying templates?
Atm i store them on disk.

Is there any way to parse a template and execute all the lift:MyStuff
in that template?
Like Xml.load but the way lift does it to render stuff in it.

I tried to find it in code but didn't succeed.
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: Rendering dynamic templates

2009-08-06 Thread fbettag

gnaa, i had a caching problem with this one.. the problem is the first
argument to processSurroundAndInclude.. still.. ;)

On Aug 7, 12:47 am, fbettag fr...@bett.ag wrote:
         def render(inContentid: String): LiftResponse = {
                 val content = Content.find(By(Content.id, 
 inContentid.toLong)) match
 {
                         case Full(obj) = obj
                         case _ = return NotFoundResponse()
                 }

                 val layout = Layout.find(By(Layout.id, content.layout)) match 
 {
                         case Full(obj) = obj
                         case _ = return NotFoundResponse()
                 }

                 val sess = S.session match {
                         case Full(obj: LiftSession) = obj
                         case _ = return InternalServerErrorResponse()
                 }

                 val res = sess.processSurroundAndInclude(
                                         layout.layout,
                                           lift:surround at=content
                                                 
 p{XML.loadString(content.content)}/p
                                           /lift:surround
                                 )

                 XhtmlResponse(res.first, Empty, Nil, Nil, 200, true)
         }

 this works very nicely!

 On Aug 7, 12:18 am, fbettag fr...@bett.ag wrote:



  marius, do you have any idea what i could pass lift:surround's with=
  attribute?

  On Aug 6, 11:31 pm, fbettag fr...@bett.ag wrote:

   The CMS is my exactly my usecase. I'll try my luck with
   processSurroundAndInclude.

   On Aug 6, 11:07 pm, Derek Chen-Becker dchenbec...@gmail.com wrote:

It might be nice to make template loading configurable. Currently,
TemplateFinder is used to load templates and it, in turn, uses
LiftRules.finder to locate a resource by name from the classloader. I 
think
that we could add a layer of indirection there to allow someone to use a
partial function to determine where a template is loaded from, and 
provide a
default impl that represents the current behavior. I'm thinking 
something
like

PartialFunction[(List[String],String),Box[NodeSeq]]

One possible use would be for something like a CMS, with the template 
stored
in a database. Thoughts?

Derek

where List[String] is the template path and the second String is the ISO
Language code.

On Thu, Aug 6, 2009 at 2:12 PM, fbettag fr...@bett.ag wrote:

 Hi there,

 i was just wondering how one would go about dynamifying templates?
 Atm i store them on disk.

 Is there any way to parse a template and execute all the lift:MyStuff
 in that template?
 Like Xml.load but the way lift does it to render stuff in it.

 I tried to find it in code but didn't succeed.
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] amqp library error

2009-08-06 Thread ph

I'm trying to use lift-amqp library, so I created a maven test project
(not Lift one, but just Scala with dependency to lift).
I'm using Eclipse with maven-scala-plugin on Windows.

I'm using almost exact copy of ExampleStringAMQPSender and
ExampleStringAMQPListener. And it behaves very weird:
compiling and running from maven (mvn scala:run ...) and jar (java -
jar ...) gives runtime error:
Exception in thread main java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown
Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.simontuffs.onejar.Boot.run(Boot.java:306)
at com.simontuffs.onejar.Boot.main(Boot.java:159)
Caused by: java.lang.VerifyError: (class: net/liftweb/amqp/
AMQPDispatcher, method: loop signature: (
Lscala/List;)V) Can only throw Throwable objects
at s38.plm.amqp.listener.init(connection.scala:35)
at s38.plm.amqp.App$.init(App.scala:10)
at s38.plm.amqp.App$.clinit(App.scala)
at s38.plm.amqp.App.main(App.scala)
... 6 more


Running from Eclipse as Scala application works.
Currently I'm using lift version 1.1-M4, but same was with lift 1.0.


Any thoughts?

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: amqp library error

2009-08-06 Thread Timothy Perrett


I wrote a fairly extensive blog about how to use the AMQP module - please
take a read of it and watch the video:  http://is.gd/CkPX - my example is
also not a webapp, so its just what you want!

The source code is also available which should help you.

Cheers, Tim

On 06/08/2009 23:55, ph pkirsa...@gmail.com wrote:

 
 I'm trying to use lift-amqp library, so I created a maven test project
 (not Lift one, but just Scala with dependency to lift).
 I'm using Eclipse with maven-scala-plugin on Windows.
 
 I'm using almost exact copy of ExampleStringAMQPSender and
 ExampleStringAMQPListener. And it behaves very weird:
 compiling and running from maven (mvn scala:run ...) and jar (java -
 jar ...) gives runtime error:
 Exception in thread main java.lang.reflect.InvocationTargetException
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown
 Source)
 at java.lang.reflect.Method.invoke(Unknown Source)
 at com.simontuffs.onejar.Boot.run(Boot.java:306)
 at com.simontuffs.onejar.Boot.main(Boot.java:159)
 Caused by: java.lang.VerifyError: (class: net/liftweb/amqp/
 AMQPDispatcher, method: loop signature: (
 Lscala/List;)V) Can only throw Throwable objects
 at s38.plm.amqp.listener.init(connection.scala:35)
 at s38.plm.amqp.App$.init(App.scala:10)
 at s38.plm.amqp.App$.clinit(App.scala)
 at s38.plm.amqp.App.main(App.scala)
 ... 6 more
 
 
 Running from Eclipse as Scala application works.
 Currently I'm using lift version 1.1-M4, but same was with lift 1.0.
 
 
 Any thoughts?
 
  
 



--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: SOAP web services?

2009-08-06 Thread Timothy Perrett


Myself and Viktor are two committers who do a lot of SOAP work - right now,
the best route forward it to use the Java JAX-WS code and call into it with
a scala wrapper - this is exactly what I do and it works perfectly.

Because there is toll free calling of Java code, there is little point in
porting such massive projects to Scala; just make a wrapper that suits your
needs. 

In my environment I have about 40+ endpoints, with hundreds of methods so I
just made a scala wrapper that lets me do:

DriverManager.whateverdriver.myMethod(params) // Box[T]

IMO, that's a damn lot easier than calling a boat load of Java (of course
its doing the under the hood, but like I said, its just a wrapper).

HTH

Cheers, Tim

On 06/08/2009 16:26, Jacek Furmankiewicz jace...@gmail.com wrote:

 
 I was reading through the Lift book PDF and it mentions only REST-
 style web services.
 
 In our case, we need to look at re-implementing a set of existing SOAP
 web services (is there anything like 'wsdl2scala' anywhere?).
 
 I would appreciate any best practices and suggestions for implementing
 SOAP web services in the context of a larger Lift app (and Scala in
 general).
 
  
 



--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: How do I create a function that takes MetaMappers?

2009-08-06 Thread jon

excellent!

thank you both.

- jon

On Aug 6, 3:47 pm, Ross Mellgren dri...@gmail.com wrote:
 Naftoli's suggestion is good, but I think your problem now is that  
 User is not : LongKeyedMapper, it's : KeyedMapper. Here's one that  
 compiles:

 object Test {
      def findAll[T](m: KeyedMetaMapper[_, T]) = m.findAll

      def test {
          val users: List[User] = findAll(User)
          users
      }

 }

 On Aug 6, 2009, at 3:39 PM, jon wrote:





  Thanks Naftoli,

  is this what you mean?

      def findAll[T : LongKeyedMapper[T]] (metaObject:
  LongKeyedMetaMapper[T]): List[T] = {
        metaObject.findAll
      }
      **val users:List[User] = findAll[User](User)

  still get **- type arguments [com.udorse.lift.model.User] do not
  conform to method findAll's type parameter bounds [T :
  net.liftweb.mapper.LongKeyedMapper[T]]

  On Aug 6, 3:30 pm, Naftoli Gugenheim naftoli...@gmail.com wrote:
  Pull M out as a type parameter and just declare the value parameter  
  to be whatever M means.

  -

  Ross Mellgrendri...@gmail.com wrote:

  What complaint does the compiler have?

  -Ross

  On Aug 6, 2009, at 2:06 PM, jon wrote:

  I'd like to do something like

      def findAll[T : LongKeyedMapper[T],M : LongKeyedMetaMapper[T]]
  (metaObject: M): List[T] = {
        metaObject.findAll
      }

      val users:List[User] = findAll(User)
      val foos:List[Foo] = findAll(Foo)

  But the compiler won't have it.

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: Rendering dynamic templates

2009-08-06 Thread fbettag

Ok the problem is in src/main/scala/net/liftweb/bultin/snippet/
Surround.scala line 36:
#36 ctx.findAndMerge(S.attr.~(with), paramsMap)

Here is the function which clearly needs a file to work with. u'll do
the bind by hand.

  private[liftweb] def findAndMerge(templateName: Box[Seq[Node]],
atWhat: Map[String, NodeSeq]): NodeSeq =
{
val name = templateName.map(s = if (s.text.startsWith(/))
s.text else /+ s.text).openOr(/templates-hidden/
default)

findTemplate(name) match
{
  case f@ Failure(msg, be, _) if Props.devMode
=
failedFind
(f)
  case Full(s) = bind(atWhat,
s)
  case _ = atWhat.values.flatMap
(_.elements).toList
}
  }

I will post my solution later.

On Aug 7, 12:49 am, fbettag fr...@bett.ag wrote:
 gnaa, i had a caching problem with this one.. the problem is the first
 argument to processSurroundAndInclude.. still.. ;)

 On Aug 7, 12:47 am, fbettag fr...@bett.ag wrote:



          def render(inContentid: String): LiftResponse = {
                  val content = Content.find(By(Content.id, 
  inContentid.toLong)) match
  {
                          case Full(obj) = obj
                          case _ = return NotFoundResponse()
                  }

                  val layout = Layout.find(By(Layout.id, content.layout)) 
  match {
                          case Full(obj) = obj
                          case _ = return NotFoundResponse()
                  }

                  val sess = S.session match {
                          case Full(obj: LiftSession) = obj
                          case _ = return InternalServerErrorResponse()
                  }

                  val res = sess.processSurroundAndInclude(
                                          layout.layout,
                                            lift:surround at=content
                                                  
  p{XML.loadString(content.content)}/p
                                            /lift:surround
                                  )

                  XhtmlResponse(res.first, Empty, Nil, Nil, 200, true)
          }

  this works very nicely!

  On Aug 7, 12:18 am, fbettag fr...@bett.ag wrote:

   marius, do you have any idea what i could pass lift:surround's with=
   attribute?

   On Aug 6, 11:31 pm, fbettag fr...@bett.ag wrote:

The CMS is my exactly my usecase. I'll try my luck with
processSurroundAndInclude.

On Aug 6, 11:07 pm, Derek Chen-Becker dchenbec...@gmail.com wrote:

 It might be nice to make template loading configurable. Currently,
 TemplateFinder is used to load templates and it, in turn, uses
 LiftRules.finder to locate a resource by name from the classloader. I 
 think
 that we could add a layer of indirection there to allow someone to 
 use a
 partial function to determine where a template is loaded from, and 
 provide a
 default impl that represents the current behavior. I'm thinking 
 something
 like

 PartialFunction[(List[String],String),Box[NodeSeq]]

 One possible use would be for something like a CMS, with the template 
 stored
 in a database. Thoughts?

 Derek

 where List[String] is the template path and the second String is the 
 ISO
 Language code.

 On Thu, Aug 6, 2009 at 2:12 PM, fbettag fr...@bett.ag wrote:

  Hi there,

  i was just wondering how one would go about dynamifying templates?
  Atm i store them on disk.

  Is there any way to parse a template and execute all the 
  lift:MyStuff
  in that template?
  Like Xml.load but the way lift does it to render stuff in it.

  I tried to find it in code but didn't succeed.
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: Eclipse setup

2009-08-06 Thread jon

I've found that simply closing all the open files and re-opening fixes
some quirks.

I'm using eclipse 3.5, IAM .10, scala 2.7.5, and javarebel-plugin
1.0.3 with javarebel 2.0.2b

Is anyone else using javarebel with eclipse?  I just run RunWebApp
as a scala Application from within eclipse with javarebel.  It works
well when changing non-singletons--  Better than using jetty on a
scanInterval which leaks permgen when it reloads the context.

- Jon

On Aug 6, 6:27 pm, Jonathan A Ferguson j...@spiralarm.com wrote:
 See if the following configuration helps you as it solved most of my  
 problems.

        
 http://blog.spiralarm.com/richard/2009/07/using-existing-scala-maven-...

 Cheers
 Jono

 On 07/08/2009, at 6:44 AM, Steffen Weißmann wrote:





  You have two output folders: the Scala IDE = 2.7.5.final only
  supports one. Use a single default output folder.
  That helped somehow, at least in the Boot.scala file it was pretty
  much ok. But the other files were no better. For instance, clicking on
  MetaProtoUser still opens Object.java source...

  You also have source directories nested below the top level of your
  project. Although I've seen reports that this works from various
  people, there's code in 2.7.5.final and earlier which makes this
  unlikely. If switching to a single output folder doesn't solve your
  problems try also moving your source directories to the top level.
  I tried to move the scala src folder src/main/scala to the project
  root, but that didn't improve things.

  I really would like to use eclipse, but right now i am using idea
  (even though I completely agree with David Pollaks blog posts...)
  since it usually understands the scala source code and it usually
  displays the lift code (and also other code) properly.

  I guess several people are developing lift projects with eclipse, so I
  hope there is a chance to get it working. Is there any configuration
  (Eclipse version+plugin versions+project setup) that is known to work?

  Both of these issues are fixed on trunk (but don't go there unless
  you're using the Lift 2.8.0 branch).
  Unfortunately it didn't help to avoid these two issues...

  Let me know how you get on ...
  Well, I switched to idea for now, and i don't like it. Would it make
  sense to use the trunk version?

  Cheers, Steffen.

  Cheers,

  Miles

  --
  Miles Sabin
  tel: +44 (0)7813 944 528
  skype:  milessabin
 http://www.chuusai.com/
 http://twitter.com/milessabin

  --
  Steffen Weissmann

  Technische Universitaet Berlin - Math. Department - MA 3-2

  Str. des 17. Juni 136
  10623 Berlin - Germany

  Phone: +49 30 314-29278
  Mail: weissm...@math.tu-berlin.de
  Web:www.math.tu-berlin.de/~weissman
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: Rendering dynamic templates

2009-08-06 Thread fbettag

Yeah, finally i am getting better at finding this stuff out myself ;)

The dirty solution is to create an empty file named empty.html
templates-hidden and use this bind:

val res = sess.processSurroundAndInclude(
empty,
  bind(lift, lift:content/, 
//XML.loadString(layout.layout),
   content - XML.loadString(content.content)
)
)

XhtmlResponse(res.first, Empty, Nil, Nil, 200, true)


Until we got something real, this works! :)

On Aug 7, 3:27 am, fbettag fr...@bett.ag wrote:
 Ok the problem is in src/main/scala/net/liftweb/bultin/snippet/
 Surround.scala line 36:
 #36 ctx.findAndMerge(S.attr.~(with), paramsMap)

 Here is the function which clearly needs a file to work with. u'll do
 the bind by hand.

   private[liftweb] def findAndMerge(templateName: Box[Seq[Node]],
 atWhat: Map[String, NodeSeq]): NodeSeq =
 {
     val name = templateName.map(s = if (s.text.startsWith(/))
 s.text else /+ s.text).openOr(/templates-hidden/
 default)

     findTemplate(name) match
 {
       case f@ Failure(msg, be, _) if Props.devMode
 =
         failedFind
 (f)
       case Full(s) = bind(atWhat,
 s)
       case _ = atWhat.values.flatMap
 (_.elements).toList
     }
   }

 I will post my solution later.

 On Aug 7, 12:49 am, fbettag fr...@bett.ag wrote:



  gnaa, i had a caching problem with this one.. the problem is the first
  argument to processSurroundAndInclude.. still.. ;)

  On Aug 7, 12:47 am, fbettag fr...@bett.ag wrote:

           def render(inContentid: String): LiftResponse = {
                   val content = Content.find(By(Content.id, 
   inContentid.toLong)) match
   {
                           case Full(obj) = obj
                           case _ = return NotFoundResponse()
                   }

                   val layout = Layout.find(By(Layout.id, content.layout)) 
   match {
                           case Full(obj) = obj
                           case _ = return NotFoundResponse()
                   }

                   val sess = S.session match {
                           case Full(obj: LiftSession) = obj
                           case _ = return InternalServerErrorResponse()
                   }

                   val res = sess.processSurroundAndInclude(
                                           layout.layout,
                                             lift:surround at=content
                                                   
   p{XML.loadString(content.content)}/p
                                             /lift:surround
                                   )

                   XhtmlResponse(res.first, Empty, Nil, Nil, 200, true)
           }

   this works very nicely!

   On Aug 7, 12:18 am, fbettag fr...@bett.ag wrote:

marius, do you have any idea what i could pass lift:surround's with=
attribute?

On Aug 6, 11:31 pm, fbettag fr...@bett.ag wrote:

 The CMS is my exactly my usecase. I'll try my luck with
 processSurroundAndInclude.

 On Aug 6, 11:07 pm, Derek Chen-Becker dchenbec...@gmail.com wrote:

  It might be nice to make template loading configurable. Currently,
  TemplateFinder is used to load templates and it, in turn, uses
  LiftRules.finder to locate a resource by name from the classloader. 
  I think
  that we could add a layer of indirection there to allow someone to 
  use a
  partial function to determine where a template is loaded from, and 
  provide a
  default impl that represents the current behavior. I'm thinking 
  something
  like

  PartialFunction[(List[String],String),Box[NodeSeq]]

  One possible use would be for something like a CMS, with the 
  template stored
  in a database. Thoughts?

  Derek

  where List[String] is the template path and the second String is 
  the ISO
  Language code.

  On Thu, Aug 6, 2009 at 2:12 PM, fbettag fr...@bett.ag wrote:

   Hi there,

   i was just wondering how one would go about dynamifying templates?
   Atm i store them on disk.

   Is there any way to parse a template and execute all the 
   lift:MyStuff
   in that template?
   Like Xml.load but the way lift does it to render stuff in it.

   I tried to find it in code but didn't succeed.
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: Rendering dynamic templates

2009-08-06 Thread David Pollak
First, you can associate a default template with a given Loc in SiteMap view
the Loc.Template mechanism.
Second, you can register a partial function with LiftRules.viewDispatch to
render whatever dynamic content you want.

Third (and this is the recommended solution for a CMS), you can use a
snippet that examines current state and loads the correct template from the
backing store.  You can see an example of this in the wiki code that's in
sites/example.

Also, please remember that Lift snippets are recursive and lazily evaluated.
 This means that the XML returned by a snippet is run through Lift's
transformation process so if your snippet returns lift:foo/, the foo
snippet will be invoked.


On Thu, Aug 6, 2009 at 2:31 PM, fbettag fr...@bett.ag wrote:


 The CMS is my exactly my usecase. I'll try my luck with
 processSurroundAndInclude.

 On Aug 6, 11:07 pm, Derek Chen-Becker dchenbec...@gmail.com wrote:
  It might be nice to make template loading configurable. Currently,
  TemplateFinder is used to load templates and it, in turn, uses
  LiftRules.finder to locate a resource by name from the classloader. I
 think
  that we could add a layer of indirection there to allow someone to use a
  partial function to determine where a template is loaded from, and
 provide a
  default impl that represents the current behavior. I'm thinking something
  like
 
  PartialFunction[(List[String],String),Box[NodeSeq]]
 
  One possible use would be for something like a CMS, with the template
 stored
  in a database. Thoughts?
 
  Derek
 
  where List[String] is the template path and the second String is the ISO
  Language code.
 
 
 
  On Thu, Aug 6, 2009 at 2:12 PM, fbettag fr...@bett.ag wrote:
 
   Hi there,
 
   i was just wondering how one would go about dynamifying templates?
   Atm i store them on disk.
 
   Is there any way to parse a template and execute all the lift:MyStuff
   in that template?
   Like Xml.load but the way lift does it to render stuff in it.
 
   I tried to find it in code but didn't succeed.
 



-- 
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 liftweb@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
-~--~~~~--~~--~--~---



[Lift] Custom Login

2009-08-06 Thread turp1twin

I am new to Lift and have a newbie question. I have searched the
group and have not really found an answer to my question. I was hoping
for some pointers on implementing custom Login logic. I am currently
looking at the MetaMegaProtoUser code and am trying sort out what I
will need. I have no need for scaffolding, and am using an existing DB
with client access through Hibernate/JPA classes. I can sort out the
DB access, etc., I am just getting a bit overwhelmed trying to figure
what bits I need to replicate from MetaMegaProtoUser, if any. I know
it does quite a bit... Anyways, it is probably staring me right in the
face... and I am just being dense... but any pointers would be
appreciated! I am loving Scala and am really enjoying learning Lift,
really cool work guys! Cheers!


Jeff

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: SiteMap gives No Navigation Defined.

2009-08-06 Thread David Pollak
Please look at the console output.  If there's a stack trace generated
during the execution of Boot.scala, your app will be in an undefined state
and that may include the lack of a menu and/or title.

On Thu, Aug 6, 2009 at 12:56 PM, pabraham paulabraham...@googlemail.comwrote:


 Actually, same thing doesn't happen.  If I change the third argument,
 I get this as the title in my browser as well as the link in the site
 map.

 On 6 Aug, 20:51, pabraham paulabraham...@googlemail.com wrote:
  Same thing happens, i.e. I get No Navigation Defined. and no title.
 
  On 6 Aug, 20:38, Naftoli Gugenheim naftoli...@gmail.com wrote:
 
   Not sure why you're getting no nav, but I think you want to change the
 other Home - the first string is the id of the link.
 
   -
 
   pabrahampaulabraham...@googlemail.com wrote:
 
   Hello there,
 
   I've been looking at SiteMap and trying to get it to give me a page
   title, based on the SiteMap section in the Lift book (PDF version).
   Here's how I've tried.
 
   Boot.scala
 
   // Build SiteMap
   val entries = Menu(Loc(Home, index::Nil, Home)) :: Nil
   LiftRules.setSiteMap(SiteMap(entries:_*))
 
   default.html
 
   head
   ...
   titleLift:Menu.title//title
   ...
   /head
   body
   ...
   lift:Menu.builder li_item:class=active/
 
   This works fine, and gives me Home as the title of my page.
 
   Now I actually want a different title, so I change the Loc bit to Loc
   (abcdefg, index::Nil, Home) and get No Navigation Defined.
 
   What am I doing wrong here?
 
   Paul.

 



-- 
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 liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: Custom Login

2009-08-06 Thread David Pollak
I think you could remove the User class/object pair from the app and replace
them with:
object LoginState {
  object primaryKey extends SessionVar[Box[Long]](Empty) // the primary key
of the currently logged in user... change to Box[String] if the PK is a
String
  object currentUser extends
RequestVar[Box[YourUserClass]](primaryKey.is.flatMap(key =
lookupUser(key)))

  def logUserIn(u: YourUserClass) {
currentUser.remove()
primaryKey.set(Full(u.getPrimaryKey))
  }

  def logUserOut() {
currentUser.remove()
primaryKey.remove()
S.request.foreach(_.request.getSession.invalidate)
  }

  def loggedIn_? = primaryKey.is.isDefined
}

On Thu, Aug 6, 2009 at 8:20 PM, turp1twin turp1t...@gmail.com wrote:


 I am new to Lift and have a newbie question. I have searched the
 group and have not really found an answer to my question. I was hoping
 for some pointers on implementing custom Login logic. I am currently
 looking at the MetaMegaProtoUser code and am trying sort out what I
 will need. I have no need for scaffolding, and am using an existing DB
 with client access through Hibernate/JPA classes. I can sort out the
 DB access, etc., I am just getting a bit overwhelmed trying to figure
 what bits I need to replicate from MetaMegaProtoUser, if any. I know
 it does quite a bit... Anyways, it is probably staring me right in the
 face... and I am just being dense... but any pointers would be
 appreciated! I am loving Scala and am really enjoying learning Lift,
 really cool work guys! Cheers!


 Jeff

 



-- 
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 liftweb@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
-~--~~~~--~~--~--~---



[Lift] Re: New features

2009-08-06 Thread David Pollak
There are dependent types that mirror the parameterized types for Mapper,
KeyedMapper, etc.
I've updated ManyToMany to use the dependent types... it should eliminate
the need to have the type parameters.  If it breaks thing, please revert the
changes.

On Thu, Aug 6, 2009 at 9:55 AM, Naftoli Gugenheim naftoli...@gmail.comwrote:

 In your use case it can only be Long and User. But there has to be a type
 parameter because other people might have a String key and a Request mapper.
 And the contents of ManyToMany have to be type safe to enforce their
 consistency with however the user of ManyToMany wants them to use it. So I
 think what you want is that the compiler should figure out that since you're
 using it with a KeyedMapper[Long, User], which is ManyToMany's T :
 KeyedMapper[K,T], and ManyToMany extends KeyedMapper[K,T] and it has a self
 type of T, and therefore it would be a compiler error to write anything
 besides Long and User, therefore you must want to use Long and User and they
 should be inferred.
 I could certainly hear that, although I'm not much of a type theorist. So
 feel free to open an enhancement ticket on Scala's Trac! :)
 If I understood correctly...


 On Thu, Aug 6, 2009 at 12:43 PM, glenn gl...@exmbly.com wrote:


 Naftoli,

 As I said at the outset, this is really beyond my expertise. But I
 think it's too
 broad and maybe, even unnecessary. In my example, K can only be one
 type,
 Long, and T can only be of type User. Anything else, and the compiler
 can't be
 guaranteed to catch it, but try running the application and you get
 things like
 stack overflow errors.

 How you would fix this is beyond me. All you can really do, at this
 point, is
 make sure to include these kinds of restrictions in the docs.

 Glenn...

 On Aug 6, 9:33 am, Naftoli Gugenheim naftoli...@gmail.com wrote:
  It's too broad, or it's too restrictive/unnecessary? I'm confused, you
 seem
  to imply both.If it's too broad, tell me why. But if you want to know
 why it
  needs the type parameter, it's because it has to use the type parameter
 in
  its implentation -- just count how many times its source code uses it!
 And
  if you want to know why the compiler can't infer it or be told to infer
  it... that's another issue.
  But if passing a type that creates a conflicting inheritance causes a
  compiler crash, that's not something I can help. :)
  Regards.
 
  On Thu, Aug 6, 2009 at 12:26 PM, glenn gl...@exmbly.com wrote:
 
   Naftoli,
 
   At the risk of discussing something obviously beyond my pay grade,
   isn't the real issue Scala traits
   and the use of parameterized types. The ManyToMany trait is defined
   as:
 
   trait ManyToMany[K,T:KeyedMapper[K, T]]
 
   But this isn't really correct,is it, the parameter is too broad, and
   that leads to a lot of the confusion and results in the need for
   unnecessary documentation. When you think about it, why all the
   duplication? Why do I need to
   write my User entity as:
 
   class User extends MegaProtoUser[User] with ManyToMany[Long,User]
 
   when we all know that this would be much cleaner:
 
   class User extends MegaProtoUser[User] with ManyToMany.
 
   But traits aren't like interfaces. They have implementation and would
   need to know something about
   the parent class they are attached to - and how would you accomplish
   that (reflection, maybe). This is
   more a Scala issue than a Lift one, I think.
 
   Glenn...
 
   On Aug 5, 8:24 pm, Naftoli Gugenheim naftoli...@gmail.com wrote:
Building causes a stack overflow?
So the question is, is it the resident compiler or plain scalac also
   crashes? Or just the presentation compiler? What do you see in the
 error log
   view or file?
I get compiler crashes very often when doing fancy mapper type
 related
   tricks.
 
-
 
glenngl...@exmbly.com wrote:
 
Naftoli,
 
Hate to do this to you, but I'm getting the following error using
ManyToMany for Users to Roles:
 
Message: java.lang.RuntimeException: Broken join
scala.Predef$.error(Predef.scala:76)
 
   net.liftweb.mapper.ManyToMany$MappedManyToMany$$anonfun$children$1$
$anonfun$apply$1.apply(ManyToMany.scala:54)
 
   net.liftweb.mapper.ManyToMany$MappedManyToMany$$anonfun$children$1$
$anonfun$apply$1.apply(ManyToMany.scala:54)
net.liftweb.util.EmptyBox.openOr(Box.scala:372)
   
 net.liftweb.mapper.ManyToMany$MappedManyToMany$$anonfun$children
$1.apply(ManyToMany.scala:54)
   
 net.liftweb.mapper.ManyToMany$MappedManyToMany$$anonfun$children
$1.apply(ManyToMany.scala:54)
scala.List.map(List.scala:812)
net.liftweb.mapper.ManyToMany$MappedManyToMany.children
(ManyToMany.scala:54)
net.liftweb.mapper.ManyToMany$MappedManyToMany.elements
(ManyToMany.scala:96)
scala.Seq$class.flatMap(Seq.scala:293)
net.liftweb.mapper.ManyToMany$MappedManyToMany.flatMap