[Lift] Re: Dynamic SiteMap
First of all I'm not reinventing anything. I don't think that If LocParam semantic is giving you the hidden functionality as well. User type 2 should not even see the menus for user type 1, not only to not be able to access those locations. The way I see it this functionality should be totally irrespective of Mappers or any persistence store. It is just a matter of how you implement the function passed to If and other LocParams. You can also implement your own Loc and override the calcHidden function and you can decide what to render there. I still think that a conditional hidden LocParam would be helpful. Br's, Marius. On Oct 12, 2:27 am, Dave davidtgoldb...@gmail.com wrote: Marius- Thanks for your help on this. I guess I'm not sure how this differs from the current conception of the If LocParam. As I understand it, it is checked when determining what to display on the Menu as well as when a User attempts to access the page (or its subdirectory if passing a pair). If this is true, then I think there is no need to reinvent the wheel per se. Assuming I'm right and we can use If's to accomplish this functionality, I can follow up this query with an implementation based question. Specifically, since both of my user types extend MegaProtoUser, I end up with loggedIn_? function that tells if some user is logged in, but is confused about which. So if a user of type 1 logs in and I call UserType2.loggedIn_?, it will also return true. Is there a way to check for this in If statements? Or is it necessary to override loggedIn_? (which I've been trying, but has been pretty slow going so far). Thanks Dave On Oct 11, 12:36 pm, marius d. marius.dan...@gmail.com wrote: Yes, a Loc accepts many LocParams ... as I said above If/Unless/Test would be used in conjunction with CondHidden to also provide accessibility constraints. Here is the definition case object CondHidden(test: () = Boolean) extends LocParam but we also have case class If(test: () = Boolean, failMsg: FailMsg) extends LocParam So the test function is the same which means that you essentially implement one function and provide it to both LocParam's. We could probably combine the two LocParams in a: IfHidden(test: () = Boolean, failMsg: FailMsg) // if you have a better name please let me know :) The test function would be called in two cases: 1. When rendering the Menu to see is the Menu should be rendered or not 2. When try to access the location to as a security check I could probably add it this week and point you to my branch to check it out. If I runt into something weird that I cannot foresee I'll let you know. Would this work for you? Other people are welcome to comment as well ... Br's, Marius On Oct 11, 7:06 pm, Dave davidtgoldb...@gmail.com wrote: Hi Marius, Thanks for the response. The LocParam is a good idea, but here is the attendant problem. No only do I have to hide options A,B,C from user type 2, I have to make sure user type 2 does not access those pages/ areas. Can I include that in the locParam as well? Right now, I'm using an If() val to determine what type of user it is, and then funnel accordingly. I assume i can just include both the if (to determine access/where to send) and then the conditional hider LocParam if necessary. But can I bundle both into a more DRY solution? Thanks, Dave On Oct 11, 2:54 am, marius d. marius.dan...@gmail.com wrote: So doesn't what I described about help you? ... a conditional Hidden LocParam? ...thus the SiteMap contains all A, B, C, D, E, F menus but for user type 1 D, E,, F are hidden, and for user type 2 A, B, C are hidden. The decision would done in the function that you provide to CondHidden. If this helps the new LocParam could be added with not much problems. If this doesn't work for you, please elaborate. Br's, Marius On Oct 11, 2:09 am, Dave davidtgoldb...@gmail.com wrote: Hi all- I am interested in a similar question. I have two types of users and once logged in, I'd like to provide them with distinct menu options. For instance User type one would have a menu with A / B / C and User Type Two would have D / E / F. I have tried a variety of approaches including storing a session variable when the user first logs in, but because the sitemap is already built, its tough to modify dynamically. Further, unfortunately, User1.sitemap and User2.sitemap don't play well together, and only one should be shown at one time depending on the user type. Not to take away from Markus' question, but if someone could address this more concrete scenario, it would be much appreciated. Thanks, Dave On Oct 10, 5:09 pm, marius d. marius.dan...@gmail.com wrote: Well SiteMap is per LiftRules which means it's per application runtime. One approach would
[Lift] Re: Lift UVP's
I think that focusing on the selling points is a good strategy, people cannot and will not learn the code in the preso, so demonstrating _why_ Lift is a good choice if you value the things that Lift brings to the table, and then start lining up things on the table. On Mon, Oct 12, 2009 at 12:09 AM, Rick R rick.richard...@gmail.com wrote: From an outsider: Comet/Actors was a big draw for me to Lift. As I learned more, the view-first philosophy began becoming very helpful. In addition, it offers an insanely powerful session state API. It is also secure by default, offering many features that would be a pain to retrofit into a system. The component oriented views/templates and no-single-controller philosophy is also a major win. IMO it, along with Nitrogen may be the only major framework to actually offer true modularization. It was these and other benefits that lured me *despite* its integration with the existing JEE infrastructure. Coming from a functional and c++ background, Lift's association with Java was a detriment in my eyes. I am know that there are others like me, and, depending on the audience, it may need to be addressed. Just my two cents. Good luck with your talk! On Sun, Oct 11, 2009 at 5:37 PM, Timothy Perrett timo...@getintheloop.euwrote: Guys, In about a month im speaking at a fairly sizeable event in Belgium and wanted to ask a few questions about what users see at Lift's unique value proposition. I did a talk about lift at a bar-camp recently and whilst they were fairly well received, I think i still assumed too much information. To that end, I thought by focusing on some of lifts super cool features in a broad way I would then aim to give people a better overview / warm fuzzy feeling about Lift in the allotted hour. So what are Lift's UVP's? My list looks a little like: - OOTB Comet (probably what draws most people to lift) - View first / code free templating - Utilisation of existing JEE infrastructure (WARs, JPA etc) - Non-perscriptive but highly configurable framework Then we also have some stuff that we inherit from scala: - traits - concise but type safe code - etc etc etc What do people think? I have an hour to make people feel good about Lift and hopefully give them enough of a taste to go away and try it later - am i missing anything blindingly obvious? This isnt a hard and fast outline of my preso, just trying to kick around some thoughts and ideas :-) Cheers, Tim -- Viktor Klang Blog: klangism.blogspot.com Twttr: viktorklang Lift Committer - liftweb.com AKKA Committer - akkasource.org Cassidy - github.com/viktorklang/Cassidy.git SoftPub founder: http://groups.google.com/group/softpub --~--~-~--~~~---~--~~ 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: Dynamic SiteMap
marius d. marius.dan...@gmail.com writes: First of all I'm not reinventing anything. I don't think that If LocParam semantic is giving you the hidden functionality as well. I haven't checked closely, but the scaladoc seem to indicate that it does. And in my own menu snippets (which is based on the original menu snippet), inaccessible items doesn't show either /** * If the test returns True, the page can be accessed, otherwise, * the result of FailMsg will be sent as a response to the browser. * If the Loc cannot be accessed, it will not be displayed in menus. * * @param test -- the function that tests access to the page * @param failMsg -- what to return the the browser (e.g., 304, etc.) if * the page is accessed. */ case class If(test: () = Boolean, failMsg: FailMsg) extends LocParam /Jeppe --~--~-~--~~~---~--~~ 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: Dynamic SiteMap
Dave davidtgoldb...@gmail.com writes: [...] Specifically, since both of my user types extend MegaProtoUser, I end up with loggedIn_? function that tells if some user is logged in, but is confused about which. So if a user of type 1 logs in and I call UserType2.loggedIn_?, it will also return true. Is there a way to check for this in If statements? Or is it necessary to override loggedIn_? (which I've been trying, but has been pretty slow going so far). Is there a reason you need two user _types_? It sounds like this could be accomplished by adding a role to the user. Then you could easily do If(User.loggedIn_? User.role1_?) /Jeppe --~--~-~--~~~---~--~~ 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: Lift UVP's
Hey Rick, Thanks for your feedback - its often helpful to get an outsiders perspective! Making note about the session granularity is an interesting one - if you had to give a simple message to someone else like yourself who was coming to lift about this, what would you say to them? Cheers, Tim On 11 Oct 2009, at 23:09, Rick R wrote: From an outsider: Comet/Actors was a big draw for me to Lift. As I learned more, the view-first philosophy began becoming very helpful. In addition, it offers an insanely powerful session state API. It is also secure by default, offering many features that would be a pain to retrofit into a system. The component oriented views/templates and no-single-controller philosophy is also a major win. IMO it, along with Nitrogen may be the only major framework to actually offer true modularization. It was these and other benefits that lured me despite its integration with the existing JEE infrastructure. Coming from a functional and c++ background, Lift's association with Java was a detriment in my eyes. I am know that there are others like me, and, depending on the audience, it may need to be addressed. Just my two cents. Good luck with your talk! On Sun, Oct 11, 2009 at 5:37 PM, Timothy Perrett timo...@getintheloop.eu wrote: Guys, In about a month im speaking at a fairly sizeable event in Belgium and wanted to ask a few questions about what users see at Lift's unique value proposition. I did a talk about lift at a bar-camp recently and whilst they were fairly well received, I think i still assumed too much information. To that end, I thought by focusing on some of lifts super cool features in a broad way I would then aim to give people a better overview / warm fuzzy feeling about Lift in the allotted hour. So what are Lift's UVP's? My list looks a little like: - OOTB Comet (probably what draws most people to lift) - View first / code free templating - Utilisation of existing JEE infrastructure (WARs, JPA etc) - Non-perscriptive but highly configurable framework Then we also have some stuff that we inherit from scala: - traits - concise but type safe code - etc etc etc What do people think? I have an hour to make people feel good about Lift and hopefully give them enough of a taste to go away and try it later - am i missing anything blindingly obvious? This isnt a hard and fast outline of my preso, just trying to kick around some thoughts and ideas :-) Cheers, Tim --~--~-~--~~~---~--~~ 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: Lift UVP's
Completly :-) Thats why i just want to present a strong case of features and get away from code on slides. I might do a few slides showing some code, perhaps for things like template binding or comet. But generally id like to think about features. So, what might you suggest mate? Cheers, Tim On 12 Oct 2009, at 08:27, Viktor Klang wrote: I think that focusing on the selling points is a good strategy, people cannot and will not learn the code in the preso, so demonstrating _why_ Lift is a good choice if you value the things that Lift brings to the table, and then start lining up things on the table. --~--~-~--~~~---~--~~ 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: Lift UVP's
On Mon, Oct 12, 2009 at 11:06 AM, Timothy Perrett timo...@getintheloop.euwrote: Completly :-) Thats why i just want to present a strong case of features and get away from code on slides. I might do a few slides showing some code, perhaps for things like template binding or comet. But generally id like to think about features. So, what might you suggest mate? :-) Perhaps something like The Lift philosophy View-first - Pros and Cons Comet OOTB (the 30 line chat example is always a crowd-pleaser) The security model (random uids, SiteMap, Http Auth etc) Performance and scaling That's what's on top of my head... Cheers, Tim On 12 Oct 2009, at 08:27, Viktor Klang wrote: I think that focusing on the selling points is a good strategy, people cannot and will not learn the code in the preso, so demonstrating _why_ Lift is a good choice if you value the things that Lift brings to the table, and then start lining up things on the table. -- Viktor Klang Blog: klangism.blogspot.com Twttr: viktorklang Lift Committer - liftweb.com AKKA Committer - akkasource.org Cassidy - github.com/viktorklang/Cassidy.git SoftPub founder: http://groups.google.com/group/softpub --~--~-~--~~~---~--~~ 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] Extend the tables that like the migration in the Rails ?
Hi all, I don't know whether there is a mechanism that like the migration of the Rails in the Liftweb, and how can we extend the table, such as add a column desc into a table users (OR user ?). I add this code in the User model and restart the server, the table don't change anything ! ### class User extends MegaProtoUser[User] { ... object desc extends MappedPoliteString(this, 128) ... } ### How can i do if i want to achieve this purpose ? Thanks for any suggestion! Cheers, Neil --~--~-~--~~~---~--~~ 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] Question about the TreeViewDemo in the lift widgets section of the Exploring LIft pdf
I've interpreted the demo as the code below. However, I get this exception when I compile: /snippet/TreeViewDemo.scala:14: error: not found: value JsObj TreeView(example, JsObj(animated-90)) I'm not sure what I'm doing wrong I'd appreciate any help. Here's the code: package com.nsfw.bmp.businesssetup.snippet import _root_.net.liftweb.http._ import S._ import _root_.net.liftweb.http.js.JsObj import _root_.net.liftweb.util._ import Helpers._ import _root_.net.liftweb.widgets.tree._ import _root_.scala.xml._ class TreeViewDemo { def render(xhtml:Group):NodeSeq={ TreeView(example, JsObj((animated-90))) } def loadTree() = { Tree(No Children):: Tree(one static child, Tree(Lone child) :: Nil) :: Tree(Dynamic node, myDynamic, true) :: Nil } def loadNode(id:String) : List[Tree] = id match { case myDyanmic = Tree(Child one) :: Tree(Child two) ::Nil case _ = 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: Why fields are declared as 'object' with Mapper/Record?
I've spent some time and came up with this code: http://github.com/ojow/Random-code/blob/master/Test.scala I think it should allow all the needed stuff, it keeps meaning with the bytes and also: * its reusable/extensible in many directions, no static stuff * i checked generated .class files and looks like no extra hidden fields or heave methods are generated, so its technically light-weight * it doesn't use/need reflection (not sure if its good or bad) Would be nice to hear some feedback on that. P.S. I'm still a newbie in Scala so excuse me if this code is worthless and if i'm just stealing your time. On Oct 7, 3:54 am, David Pollak feeder.of.the.be...@gmail.com wrote: On Tue, Oct 6, 2009 at 10:16 AM, Oleg G. ojo...@gmail.com wrote: As i said before i'm not sure that i'm getting the whole picture and maybe my initial question is incorrect in its root. Still: Suppose i have a Person class declared with Mapper/Record and i want to reuse the class and all the code associated with it in another module/project. My first thought was to extend the Person class and override some of its fields by mixing in some additional traits (see my simplified example code in the initial message). But i noticed that inner objects cannot be overriden (its not obvious for me but i can get it if i dig it). You can't do this. There was a Scala language feature that would have allowed this (overriding an object) but it hasn't made the cut for 2.7 or 2.8. So how do i reuse Mapper/Record based code if i need to extend/ customize the data structures? Unfortunately, you can't. Once you've got a field defined, there's nothing you can do to change it in a subclass. On Oct 6, 11:59 pm, David Pollak feeder.of.the.be...@gmail.com wrote: On Tue, Oct 6, 2009 at 9:50 AM, Oleg G. ojo...@gmail.com wrote: Thanks for all the answers and especially for David's clarification. It would be really cool to upgrade the 'keeping the meaning with the bytes' thing (http://blog.lostlake.org/index.php?/archives/19-Keeping- the-meaning-with-the-bytes.html) to allow extension/customization. What kind of extensions/customizations? MappedXXX can all be subclassed, extended and customized. -- Lift, the simply functional web frameworkhttp://liftweb.net Beginning Scalahttp://www.apress.com/book/view/1430219890 Follow me:http://twitter.com/dpp Surf the harmonics --~--~-~--~~~---~--~~ 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: Extend the tables that like the migration in the Rails ?
Is User added to Schemefier in Boot.scala? It should look something like: Schemifier.schemify(true, Log.infoF _, User) Peter Robinett On Oct 12, 11:22 am, Neil.Lv anim...@gmail.com wrote: Hi all, I don't know whether there is a mechanism that like the migration of the Rails in the Liftweb, and how can we extend the table, such as add a column desc into a table users (OR user ?). I add this code in the User model and restart the server, the table don't change anything ! ### class User extends MegaProtoUser[User] { ... object desc extends MappedPoliteString(this, 128) ... } ### How can i do if i want to achieve this purpose ? Thanks for any suggestion! Cheers, Neil --~--~-~--~~~---~--~~ 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: PayPal Subscriptions
Just tested with paypal sandbox and it works, thanks. On Oct 11, 5:59 pm, Timothy Perrett timo...@getintheloop.eu wrote: Ryan, I have pushed the code to master so give it a couple of hours and Hudson should automatically start pulling those changes into 1.1- SNAPSHOT JARs for you. Alternatively do a pull and build locally. Cheers, Tim On 10 Oct 2009, at 01:38, Timothy Perrett wrote: Ryan, Ignore my last email please - i've just tested the change using the IPN simulator and it now handles the Cancel message properly by passing Empty. The change is on my branch here: http://github.com/dpp/liftweb/commit/451dd3cb97e562a063da5cfe046badf1... Cheers, Tim On Oct 10, 1:05 am, Timothy Perrett timo...@getintheloop.eu wrote: Ryan, Looking at it, the strange thing is actually why it compiles now, not why it doesn't compile with the change you suggested. Given: for (info - buildInfo(resp, r); // stat is going to be a Box[PaypalTransactionStatus.Value] anyway // because of L489. stat - info.paymentStatus) yield { actions((stat, info, r)) true } So, it appears that adding the Box[] to the partial function definition would just make the type exactly right. Im starting to write some mock tests etc as this is going to need testing programatically. More to come soon. Cheers, Tim On Oct 9, 7:03 pm, Ryan Donahue donahu...@gmail.com wrote: Here's a diff showing the changes I made. Notice I added a case to the SimplePaypal.actions method that I'd think would fail compilation but does not. On Fri, Oct 9, 2009 at 1:08 PM, Ryan Donahue donahu...@gmail.com wrote: Well, I am a scala newb, but I know maven all too well. I ran mvn clean install from the lift-paypal dir to install lift-paypal-1.1- SNAPSHOT.jar to my local repo. To be sure, I changed the signature as follows which does cause errors: def actions: PartialFunction[(PayPalInfo, Req), Unit] Change back to def actions: PartialFunction[(Box[PaypalTransactionStatus.value], PayPalInfo, Req), Unit] and no errors. On Fri, Oct 9, 2009 at 12:35 PM, Timothy Perrett timo...@getintheloop.euwrote: Hey Ryan, How *exactly* did you locally do the build? If you had done the install of your altered lift-paypal then you would certainly get a compile error because the signature has changed. The new syntax should be: object MyIPN extends PaypalIPN { def actions = { case (Full(CompletedPayment), info, req) = // do something } } The only exclusion would be if you had a implicit conversion to Box PaypalTransactionStatus types that were unboxed. Cheers, Tim On Oct 9, 3:46 pm, Ryan Donahue donahu...@gmail.com wrote: Tim, I locally changed the PaypalIPN.actions method return type to trait PaypalIPN { def actions: PartialFunction[(Box [PaypalTransactionStatus.Value], PayPalInfo, Req), Unit] } Apparently this does not cause any compilation errors for user implementing their own IPN handler as follows object MyIPN extends PaypalIPN { import PaypalTransactionStatus._ def actions = { case (CompletedPayment, info, req) = // do something } } This is not good since I assume the result is that the case won't match anymore but we won't have a compilation error to tell us to change our code. Maybe I missed something, I am a scala newbie :) -Ryan On Oct 8, 3:57 pm, Timothy Perrett timo...@getintheloop.eu wrote: Ok cool, I'll take a look at this tomrrow all being well. Thanks for the feedback Cheers, Tim Sent from my iPhone On 8 Oct 2009, at 20:43, Ryan Donahue donahu...@gmail.com wrote: I created the ticket:http://github.com/dpp/liftweb/issues/ #issue/88 I do receive the payment_status field for PDT. I bet in practice you will never receive a payment_status value other than Completed, because if the payment was not completed PayPal would not redirect the user's browser back to your PDT URL. However, I have not verified this and do check the payment status in my PDT code anyway (how could I verify that it will never happen?). So I would prefer that both were consistent, but just boxing the IPN payment status will be fine too :) On Thu, Oct 8, 2009 at 2:49 PM, Timothy Perrett timo...@getintheloop.eu wrote: Im not married to the current API, so breaking changes are OK as there are only a handful of people using this code right now. To be honest, this whole situation just underlines the need for mocking in this module of lift... i've been meaning to do it since the beginning but just never got round to it and lack of general demand. Just about why they have a different signature... if memory serves that would be because PaypalTransactionStatus is not supplied for PDT. So whilst I see your point about them being consistent, im not
[Lift] Re: Props file example
It's a simple java.properties file. You should place it in src/main/ resources/props. There is a search order but, off the top of my head, the last two options are the username running the app (e.g. peter.props) and default.props. My peter.props looks like this: db.driver=com.mysql.jdbc.Driver db.url=jdbc:mysql://localhost/myDB db.user=myUser db.password=myPassword isPeter=true Notice that you can define your own properties. Peter Robinett On Oct 12, 2:42 pm, Guillermo Acilu my_li...@me.com wrote: Hello guys, I am starting to learn Lift and I have a very silly question. I am using postgresql and I have seen that the file boot.scala reads the configuration parameters like connect string, user name and password, from a properties file called Props. I could not find an example of such a file in any document or in google. Is it a XML file or a simple java.properties file? Could you please send me an small example? Thanks in advance, GA --~--~-~--~~~---~--~~ 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: Props file example
Note that you can also intermix this with runtimes: default.props default.pilot.props Doing something like that can let you automatically load different properties based on the run mode lift is in (production vs dev etc) Your code will still look like: Props.get(some.key) //= Box[String] HTH Cheers, Tim On 12 Oct 2009, at 14:36, Peter Robinett wrote: It's a simple java.properties file. You should place it in src/main/ resources/props. There is a search order but, off the top of my head, the last two options are the username running the app (e.g. peter.props) and default.props. My peter.props looks like this: db.driver=com.mysql.jdbc.Driver db.url=jdbc:mysql://localhost/myDB db.user=myUser db.password=myPassword isPeter=true Notice that you can define your own properties. Peter Robinett On Oct 12, 2:42 pm, Guillermo Acilu my_li...@me.com wrote: Hello guys, I am starting to learn Lift and I have a very silly question. I am using postgresql and I have seen that the file boot.scala reads the configuration parameters like connect string, user name and password, from a properties file called Props. I could not find an example of such a file in any document or in google. Is it a XML file or a simple java.properties file? Could you please send me an small example? Thanks in advance, GA --~--~-~--~~~---~--~~ 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: Props file example
Thanks for the information On Oct 12, 2009, at 3:36 PM, Peter Robinett wrote: It's a simple java.properties file. You should place it in src/main/ resources/props. There is a search order but, off the top of my head, the last two options are the username running the app (e.g. peter.props) and default.props. My peter.props looks like this: db.driver=com.mysql.jdbc.Driver db.url=jdbc:mysql://localhost/myDB db.user=myUser db.password=myPassword isPeter=true Notice that you can define your own properties. Peter Robinett On Oct 12, 2:42 pm, Guillermo Acilu my_li...@me.com wrote: Hello guys, I am starting to learn Lift and I have a very silly question. I am using postgresql and I have seen that the file boot.scala reads the configuration parameters like connect string, user name and password, from a properties file called Props. I could not find an example of such a file in any document or in google. Is it a XML file or a simple java.properties file? Could you please send me an small example? Thanks in advance, GA --~--~-~--~~~---~--~~ 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] Complex primary key
Hello guys, How can I create a mapper with two or more fields as primary key? For instance if we have a table of people with a Long primary key called ID generated by IdPK, and also we have a table of addresses also with a Long primary key called ID generated by IdPK. The idea is to create an association table with both IDs to represent people with many addresses and addresses with multiple people. So both IDs will be primary key of the new table. Thanks in advance, GA --~--~-~--~~~---~--~~ 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: Lift UVP's
I would put more emphasis on the benefits of Scala than you implied, mentioning also the value of first class functions and partial functions and how lift ues them. (And maybe that Map is a partial function which can be used e.g. in a DispatchSnippet/StatefulSnippet.) - Viktor Klangviktor.kl...@gmail.com wrote: Also, a demo of working with maven + jRebel to get easy to test development On Mon, Oct 12, 2009 at 12:27 PM, Timothy Perrett timo...@getintheloop.euwrote: Agreed - the security stuff is pretty cool and adds value for sure. Thanks for the thoughts - I need to get writing! Cheers, Tim On 12 Oct 2009, at 10:14, Viktor Klang wrote: :-) Perhaps something like The Lift philosophy View-first - Pros and Cons Comet OOTB (the 30 line chat example is always a crowd-pleaser) The security model (random uids, SiteMap, Http Auth etc) Performance and scaling That's what's on top of my head... -- Viktor Klang Blog: klangism.blogspot.com Twttr: viktorklang Lift Committer - liftweb.com AKKA Committer - akkasource.org Cassidy - github.com/viktorklang/Cassidy.git SoftPub founder: http://groups.google.com/group/softpub --~--~-~--~~~---~--~~ 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: beyond widgets: plugins (modular architecture)
On Mon, Oct 12, 2009 at 1:31 AM, opyate opy...@gmail.com wrote: Hey guys, I had a look at this thread: http://groups.google.com/group/liftweb/browse_thread/thread/a875258c5cccdf09/f6719565f6550513?lnk=gstq=plugin+modular#f6719565f6550513 I'm about to attempt the same. The base app (BASE) will provide a basic workflow system based on roles. The rest of the functionality will be implemented via plugins (PLUGIN). I do have a couple of issues, though: 1) Is this correct?: PLUGIN is NOT necessarily generated with lift- archetype-blank but follows a similar folder structure: src/main/scala/bootstrap/liftweb src/main/scala/my/app/plugins/pluginX src/main/webapp (no WEB-INF, and referenced in BASE's classpath) Correct. A plugin is something that does not have a Boot.scala file. It is something that is in a separate JAR file. 2) BASE needs to load PLUGIN by calling LiftRules.addToPackages(my.app.plugins.pluginX) ...but PLUGIN also needs to know about BASE's roles to utilise the workflow functionality. Will this cause a circular dependency issue? No. I initialize my non-core app stuff by calling a method on an object in my external dependency. I pass whatever dependent information is needed to the plugin. A solution to this may be factoring out the roles model component and workflow interface into a separate dependency: BASE ref {PLUGIN,ROLE} PLUGIN ref ROLE For the time being I'll put all my functionality into a monolithic app, but it would be cool to hear everyone's thoughts on this, and hopefully make it more modular soon. Thanks, Juan -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Surf the harmonics --~--~-~--~~~---~--~~ 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: Lift UVP's
Is the audience mostly Java based or from different other fields including FP? I would insist in how Lift leverages functional programming idioms offered by Scala. Personally I believe this gives Lift a pretty unique position. Br's, Marius On Oct 12, 12:37 am, Timothy Perrett timo...@getintheloop.eu wrote: Guys, In about a month im speaking at a fairly sizeable event in Belgium and wanted to ask a few questions about what users see at Lift's unique value proposition. I did a talk about lift at a bar-camp recently and whilst they were fairly well received, I think i still assumed too much information. To that end, I thought by focusing on some of lifts super cool features in a broad way I would then aim to give people a better overview / warm fuzzy feeling about Lift in the allotted hour. So what are Lift's UVP's? My list looks a little like: - OOTB Comet (probably what draws most people to lift) - View first / code free templating - Utilisation of existing JEE infrastructure (WARs, JPA etc) - Non-perscriptive but highly configurable framework Then we also have some stuff that we inherit from scala: - traits - concise but type safe code - etc etc etc What do people think? I have an hour to make people feel good about Lift and hopefully give them enough of a taste to go away and try it later - am i missing anything blindingly obvious? This isnt a hard and fast outline of my preso, just trying to kick around some thoughts and ideas :-) Cheers, Tim --~--~-~--~~~---~--~~ 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: Dynamic SiteMap
To address the specific issue of CondHidden/IfHidden, if a Loc (menu location) fails the If() or Unless() test, it will not be displayed/rendered/visible to the user. So, there's no need for a IfHidden or a CondHidden LocParam. More broadly, SiteMap represents all the pages in your site and the visibility/access rules for each of those pages. All the pages for which you have templates should also have a SiteMap entry (a Loc). The Loc will contain a set (0 or more) of If/Unless rules governing access. If there are no If/Unless rules, then the page will be accessible no matter the state of the application. If you want pages that are accessible in a particular application state (Anyone logged in, Teacher logged in, Student logged in, Teach with root privileges logged in, etc.), you define a method that calculates a Boolean based on the current application state: (assuming that User.currentUser returns a Box[User] and the User class has isTeacher, isStudent, isRootTeacher methods) def anyoneLoggedIn = User.currentUser.isDefined def teacherLoggedIn = User.currentUser.map(_.isTeacher) openOr false def studentLoggedIn = User.currentUser.map(_.isStudent) openOr false def rootTeacherLoggedIn = User.currentUser.map(_.isRootTeacher) openOr false def studentOrRootTeacher = studentLoggedIn || rootTeacherLoggedIn Now, you can define some conditionals: lazy val ifLoggedIn = If(anyoneLoggedIn _, S ?? You must be logged in to view this page) lazy val ifTeacher = If(teacherLoggedIn _, S ?? You must be a teacher to view this page) lazy val ifStudentOrRootTeacher = if(studentOrRootTeacher _, S ?? You must be a student to view this page) And you can create locations (Loc) in your SiteMap that contain the ifLoggedIn, etc. LocParams. What you see is that how you calculate a given permission is not important to the If/Unless LocParam. It's all about the current app state and nothing more. Pages guarded by If/Unless will not load if the required conditions are not met nor will they be displayed in the menu hierarchy. Does this resolve the questions/issues raised in this thread? Thanks, David On Mon, Oct 12, 2009 at 12:05 AM, marius d. marius.dan...@gmail.com wrote: First of all I'm not reinventing anything. I don't think that If LocParam semantic is giving you the hidden functionality as well. User type 2 should not even see the menus for user type 1, not only to not be able to access those locations. The way I see it this functionality should be totally irrespective of Mappers or any persistence store. It is just a matter of how you implement the function passed to If and other LocParams. You can also implement your own Loc and override the calcHidden function and you can decide what to render there. I still think that a conditional hidden LocParam would be helpful. Br's, Marius. On Oct 12, 2:27 am, Dave davidtgoldb...@gmail.com wrote: Marius- Thanks for your help on this. I guess I'm not sure how this differs from the current conception of the If LocParam. As I understand it, it is checked when determining what to display on the Menu as well as when a User attempts to access the page (or its subdirectory if passing a pair). If this is true, then I think there is no need to reinvent the wheel per se. Assuming I'm right and we can use If's to accomplish this functionality, I can follow up this query with an implementation based question. Specifically, since both of my user types extend MegaProtoUser, I end up with loggedIn_? function that tells if some user is logged in, but is confused about which. So if a user of type 1 logs in and I call UserType2.loggedIn_?, it will also return true. Is there a way to check for this in If statements? Or is it necessary to override loggedIn_? (which I've been trying, but has been pretty slow going so far). Thanks Dave On Oct 11, 12:36 pm, marius d. marius.dan...@gmail.com wrote: Yes, a Loc accepts many LocParams ... as I said above If/Unless/Test would be used in conjunction with CondHidden to also provide accessibility constraints. Here is the definition case object CondHidden(test: () = Boolean) extends LocParam but we also have case class If(test: () = Boolean, failMsg: FailMsg) extends LocParam So the test function is the same which means that you essentially implement one function and provide it to both LocParam's. We could probably combine the two LocParams in a: IfHidden(test: () = Boolean, failMsg: FailMsg) // if you have a better name please let me know :) The test function would be called in two cases: 1. When rendering the Menu to see is the Menu should be rendered or not 2. When try to access the location to as a security check I could probably add it this week and point you to my branch to check it out. If I runt into something weird that I cannot foresee I'll let you know. Would this work for you? Other
[Lift] Re: Use lift1.0 or 1.1 or 1.x to create a stable and large site(project) ?
You have to include -DremoteRepositories=http://scala-tools.org/repo-* snapshots* in the command line. On Sun, Oct 11, 2009 at 7:41 PM, Neil.Lv anim...@gmail.com wrote: I used this command to create my project and was successfully. mvn archetype:generate -U -DarchetypeGroupId=net.liftweb - DarchetypeArtifactId=lift-archetype-blank -DarchetypeVersion=1.1-M6 -DgroupId=demo.helloworld -DartifactId=helloworld2 - Dversion=1.1-M6 If i use the 1.1-SNAPSHOT, some errors occur. [INFO] The desired archetype does not exist (net.liftweb:lift- archetype-blank:1.1-SNAPSHOT) Cheers, Neil On Oct 9, 9:32 pm, David Pollak feeder.of.the.be...@gmail.com wrote: I use Lift 1.1-SNAPSHOT on all the sites I work on (that's currently at 7). There's rarely breakage on SNAPSHOT. On Fri, Oct 9, 2009 at 3:01 AM, Neil.Lv anim...@gmail.com wrote: Hi liftweb, Is anyone has used lift to create a stable and large site ? If i want to create this site which version that is suit, lift1.0 or higher version. If someone knows the site that develop by lift or has used lift to create a site, could you give me some ideas? Thanks very much! Cheers, Neil -- Lift, the simply functional web frameworkhttp://liftweb.net Beginning Scalahttp://www.apress.com/book/view/1430219890 Follow me:http://twitter.com/dpp Surf the harmonics -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Surf the harmonics --~--~-~--~~~---~--~~ 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: MappedLong null values
If you've got a good way to do this, feel encouraged to develop it on a branch. On Sun, Oct 11, 2009 at 8:22 PM, Naftoli Gugenheim naftoli...@gmail.comwrote: It would be nice if there could be a generalized way of specifying optionality for fields.(The first though question is whether the default behavior is consistent -- do all field types equate NULL with their default?) I pasted the names of all the field types (by listing all Mapped*.class files in target/classes/net/liftweb/mapper). For which of them does it make sense to have optionality, which of them do, and would it make sense to have a trait to mix in or some other consistent way to allow nullablility? MappedBinary, MappedBirthYear, MappedBoolean, MappedCountry, MappedDate, MappedDateTime, MappedDecimal, MappedDouble, MappedEmail, MappedEnum, MappedEnumList, MappedFakeClob, MappedForeignKey, MappedGender, MappedInt, MappedIntIndex, MappedLocale, MappedLong, MappedLongForeignKey, MappedLongIndex, MappedPassword, MappedPoliteString, MappedPostalCode, MappedString, MappedStringForeignKey, MappedStringIndex, MappedText, MappedTextarea, MappedTime, MappedTimeZone, MappedUniqueId On Wed, Oct 7, 2009 at 4:36 PM, David Pollak feeder.of.the.be...@gmail.com wrote: On Wed, Oct 7, 2009 at 12:55 PM, harryh har...@gmail.com wrote: I have a long field in my database that I want to have a unique index (enforced by the database). Sometimes this field will be empty, in which case I'd like to set it to NULL. 0 won't work because that won't work with the unique index. MappedLong appears to be converting null to 0 internally. Additionally overriding defaultValue for the field and returning null does not appear to work. Is this by design? Yes. Is it possible that I am misunderstanding something here? I think you're looking for a MappedOptLong which will treat None (or Empty) as NULL and Some(Long) as the value. Please open a ticket and I'll add the code. -harryh -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Surf the harmonics -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Surf the harmonics --~--~-~--~~~---~--~~ 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: Why fields are declared as 'object' with Mapper/Record?
Well i don't think its a lot of complexity. Yes its 4 declarations instead of 1 for each field. But 3 of those are generatable by IDE same way as any Java IDE generates setters and getters. All the rest is spring-style instantiations/injections. And usage is even simplier and readable (i mean syntax record.field=value). The field list method can be implemented via reflection to reduce amount of code required from users. Anyway thanks for your feedback, David, i really appreciate it. I'll try to see if i can integrate my model with Lift and implement it for Google Datastore. Then i'll report back. I understand that i still need to do more work before any serious conclusions can be made. --~--~-~--~~~---~--~~ 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: Lift UVP's
Tim, Two things I stress about Lift that tends to resonate well: - Lift abstracts away the HTTP request/response cycle. You as the developer do not need to worry about setting up something to receive form posts, ajax events, or to do the whole Comet stuff. It's plumbing and plumbing should work. Every developer should not have to be a plumber... developers should focus on the sinks, toilets and bathtubs (the stuff the users see), not the pipes in the wall. - (nearly) everything in Lift is represented in Scala. This means that we don't have 17 different dialects of annotations to worry about. This means that developers can express JavaScript in Scala. This means things are generally more type-safe and developers don't have to context switch as much. My 2 cents (or points). Thanks, David On Mon, Oct 12, 2009 at 10:21 AM, Timothy Perrett timo...@getintheloop.euwrote: Yeah it should pretty much be solid Java devs and architects :-) Cheers, Tim On 12 Oct 2009, at 18:04, marius d. wrote: Is the audience mostly Java based or from different other fields including FP? I would insist in how Lift leverages functional programming idioms offered by Scala. Personally I believe this gives Lift a pretty unique position. Br's, Marius On Oct 12, 12:37 am, Timothy Perrett timo...@getintheloop.eu wrote: Guys, In about a month im speaking at a fairly sizeable event in Belgium and wanted to ask a few questions about what users see at Lift's unique value proposition. I did a talk about lift at a bar-camp recently and whilst they were fairly well received, I think i still assumed too much information. To that end, I thought by focusing on some of lifts super cool features in a broad way I would then aim to give people a better overview / warm fuzzy feeling about Lift in the allotted hour. So what are Lift's UVP's? My list looks a little like: - OOTB Comet (probably what draws most people to lift) - View first / code free templating - Utilisation of existing JEE infrastructure (WARs, JPA etc) - Non-perscriptive but highly configurable framework Then we also have some stuff that we inherit from scala: - traits - concise but type safe code - etc etc etc What do people think? I have an hour to make people feel good about Lift and hopefully give them enough of a taste to go away and try it later - am i missing anything blindingly obvious? This isnt a hard and fast outline of my preso, just trying to kick around some thoughts and ideas :-) Cheers, Tim -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Surf the harmonics --~--~-~--~~~---~--~~ 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: Why fields are declared as 'object' with Mapper/Record?
On 13 окт, 00:08, naf g naftoli...@gmail.com wrote: Why do you have two classes, Model and Record? What are they and why are they interdependent? I thought about Model being a place for metainformation (like database structure, options/properties etc), or maybe it can be described as global context for Record-related activity. They are dependant to allow Field operations to reach the context. --~--~-~--~~~---~--~~ 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: Why fields are declared as 'object' with Mapper/Record?
So Model represents the database connection? 2009/10/12 Oleg G. ojo...@gmail.com On 13 окт, 00:08, naf g naftoli...@gmail.com wrote: Why do you have two classes, Model and Record? What are they and why are they interdependent? I thought about Model being a place for metainformation (like database structure, options/properties etc), or maybe it can be described as global context for Record-related activity. They are dependant to allow Field operations to reach the context. --~--~-~--~~~---~--~~ 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: MappedLong null values
Not offhand, maybe some discussion will generate an good plan.The easiest and worst way would be to have a marker trait or a flag, and test in each MappedXXX. Obviously not a good idea. What may work is to delegate all the code that makes decisions which depend on optionality to a method in MappedField, and override that method in a trait that can be mixed in. I haven't actually looked at the relevant Mapper code; just saying a thought. On Mon, Oct 12, 2009 at 1:31 PM, David Pollak feeder.of.the.be...@gmail.com wrote: If you've got a good way to do this, feel encouraged to develop it on a branch. On Sun, Oct 11, 2009 at 8:22 PM, Naftoli Gugenheim naftoli...@gmail.comwrote: It would be nice if there could be a generalized way of specifying optionality for fields.(The first though question is whether the default behavior is consistent -- do all field types equate NULL with their default?) I pasted the names of all the field types (by listing all Mapped*.class files in target/classes/net/liftweb/mapper). For which of them does it make sense to have optionality, which of them do, and would it make sense to have a trait to mix in or some other consistent way to allow nullablility? MappedBinary, MappedBirthYear, MappedBoolean, MappedCountry, MappedDate, MappedDateTime, MappedDecimal, MappedDouble, MappedEmail, MappedEnum, MappedEnumList, MappedFakeClob, MappedForeignKey, MappedGender, MappedInt, MappedIntIndex, MappedLocale, MappedLong, MappedLongForeignKey, MappedLongIndex, MappedPassword, MappedPoliteString, MappedPostalCode, MappedString, MappedStringForeignKey, MappedStringIndex, MappedText, MappedTextarea, MappedTime, MappedTimeZone, MappedUniqueId On Wed, Oct 7, 2009 at 4:36 PM, David Pollak feeder.of.the.be...@gmail.com wrote: On Wed, Oct 7, 2009 at 12:55 PM, harryh har...@gmail.com wrote: I have a long field in my database that I want to have a unique index (enforced by the database). Sometimes this field will be empty, in which case I'd like to set it to NULL. 0 won't work because that won't work with the unique index. MappedLong appears to be converting null to 0 internally. Additionally overriding defaultValue for the field and returning null does not appear to work. Is this by design? Yes. Is it possible that I am misunderstanding something here? I think you're looking for a MappedOptLong which will treat None (or Empty) as NULL and Some(Long) as the value. Please open a ticket and I'll add the code. -harryh -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Surf the harmonics -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Surf the harmonics --~--~-~--~~~---~--~~ 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: Why fields are declared as 'object' with Mapper/Record?
On Mon, Oct 12, 2009 at 10:38 AM, Oleg G. ojo...@gmail.com wrote: Well i don't think its a lot of complexity. You asked for feedback, I gave you my opinion. Yes its 4 declarations instead of 1 for each field. But 3 of those are generatable by IDE same way as any Java IDE generates setters and getters. And this is a failure on its face. Anything that requires an IDE to generate code represents a failure. It represents failure because the code is (1) much less maintainable, (2) depends on IDE vendors to support it, and (3) is harder for non-IDE users (me included... emacs is my tool for a lot of my Lift-based development). All the rest is spring-style instantiations/injections. And usage is even simplier and readable (i mean syntax record.field=value). The field list method can be implemented via reflection to reduce amount of code required from users. Calculating what fields are to be included in the List is what originally led to using object. Anyway thanks for your feedback, David, i really appreciate it. I'll try to see if i can integrate my model with Lift and implement it for Google Datastore. Then i'll report back. I understand that i still need to do more work before any serious conclusions can be made. While I appreciate your effort, it is is not in line with the goals of Lift. The default is not to keep the meaning with the bytes (having _name implies to me don't use this, use name instead). The complexity is significant... so significant that it requires IDE support to use effectively. The problem that it addresses is the overriding definitions of fields in subclasses issue which is important, but in this case the cure is much, much worse than disease. Thanks, David -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Surf the harmonics --~--~-~--~~~---~--~~ 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: Why fields are declared as 'object' with Mapper/Record?
Thanks again for your answers, David. I've got your point and it all looks much more clear to me now. On 13 окт, 01:19, David Pollak feeder.of.the.be...@gmail.com wrote: On Mon, Oct 12, 2009 at 10:38 AM, Oleg G. ojo...@gmail.com wrote: Well i don't think its a lot of complexity. You asked for feedback, I gave you my opinion. Yes its 4 declarations instead of 1 for each field. But 3 of those are generatable by IDE same way as any Java IDE generates setters and getters. And this is a failure on its face. Anything that requires an IDE to generate code represents a failure. It represents failure because the code is (1) much less maintainable, (2) depends on IDE vendors to support it, and (3) is harder for non-IDE users (me included... emacs is my tool for a lot of my Lift-based development). All the rest is spring-style instantiations/injections. And usage is even simplier and readable (i mean syntax record.field=value). The field list method can be implemented via reflection to reduce amount of code required from users. Calculating what fields are to be included in the List is what originally led to using object. Anyway thanks for your feedback, David, i really appreciate it. I'll try to see if i can integrate my model with Lift and implement it for Google Datastore. Then i'll report back. I understand that i still need to do more work before any serious conclusions can be made. While I appreciate your effort, it is is not in line with the goals of Lift. The default is not to keep the meaning with the bytes (having _name implies to me don't use this, use name instead). The complexity is significant... so significant that it requires IDE support to use effectively. The problem that it addresses is the overriding definitions of fields in subclasses issue which is important, but in this case the cure is much, much worse than disease. Thanks, David -- Lift, the simply functional web frameworkhttp://liftweb.net Beginning Scalahttp://www.apress.com/book/view/1430219890 Follow me:http://twitter.com/dpp Surf the harmonics --~--~-~--~~~---~--~~ 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: Debug cookies
I usually use FireBug or Safari Web Inspector to look at the Set- Cookie / Cookie headers going back and forth, or use the browser's built in cookie index (usually buried in preferences). You could also use something like Wireshark or tcpdump to watch the headers go by if you're using a browser that doesn't have debugging extensions. -Ross On Oct 12, 2009, at 3:15 PM, Naftoli Gugenheim wrote: I'm writing an app in Lift that uses cookies to remember the user as logged in. When I run it from my local computer, and when I run it from the server and view it from my local computer, it works fine. But from my client's computer it doesn't work (it seems to expire with the session). How can I debug this? Thanks. --~--~-~--~~~---~--~~ 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: Debug cookies
Firecookie (a Firebug extension) says the cookie's Expires is Session. When I log in Firebug's Net panel shows the following response header (I changed the cookie name): Set-Cookie mycookiename=Z0GZIXFRBQMVTOITYSICI1XZN23ROYLN My code in Boot looks like this: User.autologinFunc = Full(()={ for(uid - S.findCookie(cookieName); userId - uid.value; user - User.find(net.liftweb.mapper.By(User.uniqueId, userId)) ) { User.logUserIn(user) S.redirectTo(User.homePage) } } ) User.onLogIn ::= { case user = val cookie = net.liftweb.http.provider.HTTPCookie(cookieName, user.uniqueId.is) cookie.setMaxAge(2 * 7 * 24 * 60 * 60) // 2 weeks in seconds S.addCookie(cookie) } User.onLogOut ::= { case _ = S.deleteCookie(cookieName) } What am I doing wrong? Why is the max-age not getting set? On Mon, Oct 12, 2009 at 3:37 PM, Ross Mellgren dri...@gmail.com wrote: I usually use FireBug or Safari Web Inspector to look at the Set- Cookie / Cookie headers going back and forth, or use the browser's built in cookie index (usually buried in preferences). You could also use something like Wireshark or tcpdump to watch the headers go by if you're using a browser that doesn't have debugging extensions. -Ross On Oct 12, 2009, at 3:15 PM, Naftoli Gugenheim wrote: I'm writing an app in Lift that uses cookies to remember the user as logged in. When I run it from my local computer, and when I run it from the server and view it from my local computer, it works fine. But from my client's computer it doesn't work (it seems to expire with the session). How can I debug this? Thanks. --~--~-~--~~~---~--~~ 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] URL in PlainMailBodyType to BlackBerry
Hi. I'm sending an email using PlainMailBodyType that contains a URL. Normally when a BlackBerry receives a plain text email it automatically hyperlinks URLS and potential phone numbers. For some reason this email is not being hyperlinked on the BlackBerry. Is it possible that it's somehow not purely plain text? How would I solve this? I don't want to send HTML messages because some recipients may not be able to view it. Thanks. --~--~-~--~~~---~--~~ 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: Debug cookies
setMaxAge is unfortunately named -- looking at the code it appears that HTTPCookies are actually immutable, and what setMaxAge does is returns you a new cookie with the new settings. Try: val cookie = net.liftweb.http.provider.HTTPCookie(cookieName, user.uniqueId.is ).setMaxAge(2 weeks) S.addCookie(cookie) (I took the liberty of rewriting your manual date arithmetic to TimeSpan syntax) -Ross On Oct 12, 2009, at 4:06 PM, Naftoli Gugenheim wrote: Firecookie (a Firebug extension) says the cookie's Expires is Session. When I log in Firebug's Net panel shows the following response header (I changed the cookie name): Set-Cookie mycookiename=Z0GZIXFRBQMVTOITYSICI1XZN23ROYLN My code in Boot looks like this: User.autologinFunc = Full(()={ for(uid - S.findCookie(cookieName); userId - uid.value; user - User.find(net.liftweb.mapper.By(User.uniqueId, userId)) ) { User.logUserIn(user) S.redirectTo(User.homePage) } } ) User.onLogIn ::= { case user = val cookie = net.liftweb.http.provider.HTTPCookie(cookieName, user.uniqueId.is) cookie.setMaxAge(2 * 7 * 24 * 60 * 60) // 2 weeks in seconds S.addCookie(cookie) } User.onLogOut ::= { case _ = S.deleteCookie(cookieName) } What am I doing wrong? Why is the max-age not getting set? On Mon, Oct 12, 2009 at 3:37 PM, Ross Mellgren dri...@gmail.com wrote: I usually use FireBug or Safari Web Inspector to look at the Set- Cookie / Cookie headers going back and forth, or use the browser's built in cookie index (usually buried in preferences). You could also use something like Wireshark or tcpdump to watch the headers go by if you're using a browser that doesn't have debugging extensions. -Ross On Oct 12, 2009, at 3:15 PM, Naftoli Gugenheim wrote: I'm writing an app in Lift that uses cookies to remember the user as logged in. When I run it from my local computer, and when I run it from the server and view it from my local computer, it works fine. But from my client's computer it doesn't work (it seems to expire with the session). How can I debug this? Thanks. --~--~-~--~~~---~--~~ 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: Debug cookies
Thanks. I actually looked at the source code of HTTPCookie but I didn't put two and two together reading my code in Boot. I think the reason I did the math manually is because I was trying to minimize the number of imports. Do you think a lot of wildcard imports increase compile time, or not significantly (for clean build of what's currently 17 files / 70+ kb)? On Mon, Oct 12, 2009 at 4:11 PM, Ross Mellgren dri...@gmail.com wrote: setMaxAge is unfortunately named -- looking at the code it appears that HTTPCookies are actually immutable, and what setMaxAge does is returns you a new cookie with the new settings. Try: val cookie = net.liftweb.http.provider.HTTPCookie(cookieName, user.uniqueId.is ).setMaxAge(2 weeks) S.addCookie(cookie) (I took the liberty of rewriting your manual date arithmetic to TimeSpan syntax) -Ross On Oct 12, 2009, at 4:06 PM, Naftoli Gugenheim wrote: Firecookie (a Firebug extension) says the cookie's Expires is Session. When I log in Firebug's Net panel shows the following response header (I changed the cookie name): Set-Cookie mycookiename=Z0GZIXFRBQMVTOITYSICI1XZN23ROYLN My code in Boot looks like this: User.autologinFunc = Full(()={ for(uid - S.findCookie(cookieName); userId - uid.value; user - User.find(net.liftweb.mapper.By(User.uniqueId, userId)) ) { User.logUserIn(user) S.redirectTo(User.homePage) } } ) User.onLogIn ::= { case user = val cookie = net.liftweb.http.provider.HTTPCookie(cookieName, user.uniqueId.is) cookie.setMaxAge(2 * 7 * 24 * 60 * 60) // 2 weeks in seconds S.addCookie(cookie) } User.onLogOut ::= { case _ = S.deleteCookie(cookieName) } What am I doing wrong? Why is the max-age not getting set? On Mon, Oct 12, 2009 at 3:37 PM, Ross Mellgren dri...@gmail.com wrote: I usually use FireBug or Safari Web Inspector to look at the Set- Cookie / Cookie headers going back and forth, or use the browser's built in cookie index (usually buried in preferences). You could also use something like Wireshark or tcpdump to watch the headers go by if you're using a browser that doesn't have debugging extensions. -Ross On Oct 12, 2009, at 3:15 PM, Naftoli Gugenheim wrote: I'm writing an app in Lift that uses cookies to remember the user as logged in. When I run it from my local computer, and when I run it from the server and view it from my local computer, it works fine. But from my client's computer it doesn't work (it seems to expire with the session). How can I debug this? Thanks. --~--~-~--~~~---~--~~ 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: Debug cookies
I don't know if it increases compile time but I avoid wildcard imports like the plague because I think they're perhaps the most confusing thing reading scala code. Thinking to yourself that two types don't match, but you can't be sure if you're reading it wrong or if there's an implicit in scope, with explicit imports at least you can look at the import list to see if there are any applicable implicits in scope, whereas with wildcard imports you're left searching through a perhaps large list of perhaps large modules looking for implicits. And then there's the somewhat simpler pain of where the heck is this name imported from even where it's explicit. -Ross On Oct 12, 2009, at 4:27 PM, Naftoli Gugenheim wrote: Thanks. I actually looked at the source code of HTTPCookie but I didn't put two and two together reading my code in Boot. I think the reason I did the math manually is because I was trying to minimize the number of imports. Do you think a lot of wildcard imports increase compile time, or not significantly (for clean build of what's currently 17 files / 70+ kb)? On Mon, Oct 12, 2009 at 4:11 PM, Ross Mellgren dri...@gmail.com wrote: setMaxAge is unfortunately named -- looking at the code it appears that HTTPCookies are actually immutable, and what setMaxAge does is returns you a new cookie with the new settings. Try: val cookie = net.liftweb.http.provider.HTTPCookie(cookieName, user.uniqueId.is ).setMaxAge(2 weeks) S.addCookie(cookie) (I took the liberty of rewriting your manual date arithmetic to TimeSpan syntax) -Ross On Oct 12, 2009, at 4:06 PM, Naftoli Gugenheim wrote: Firecookie (a Firebug extension) says the cookie's Expires is Session. When I log in Firebug's Net panel shows the following response header (I changed the cookie name): Set-Cookie mycookiename=Z0GZIXFRBQMVTOITYSICI1XZN23ROYLN My code in Boot looks like this: User.autologinFunc = Full(()={ for(uid - S.findCookie(cookieName); userId - uid.value; user - User.find(net.liftweb.mapper.By(User.uniqueId, userId)) ) { User.logUserIn(user) S.redirectTo(User.homePage) } } ) User.onLogIn ::= { case user = val cookie = net.liftweb.http.provider.HTTPCookie (cookieName, user.uniqueId.is) cookie.setMaxAge(2 * 7 * 24 * 60 * 60) // 2 weeks in seconds S.addCookie(cookie) } User.onLogOut ::= { case _ = S.deleteCookie(cookieName) } What am I doing wrong? Why is the max-age not getting set? On Mon, Oct 12, 2009 at 3:37 PM, Ross Mellgren dri...@gmail.com wrote: I usually use FireBug or Safari Web Inspector to look at the Set- Cookie / Cookie headers going back and forth, or use the browser's built in cookie index (usually buried in preferences). You could also use something like Wireshark or tcpdump to watch the headers go by if you're using a browser that doesn't have debugging extensions. -Ross On Oct 12, 2009, at 3:15 PM, Naftoli Gugenheim wrote: I'm writing an app in Lift that uses cookies to remember the user as logged in. When I run it from my local computer, and when I run it from the server and view it from my local computer, it works fine. But from my client's computer it doesn't work (it seems to expire with the session). How can I debug this? Thanks. --~--~-~--~~~---~--~~ 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: URL in PlainMailBodyType to BlackBerry
Please send some test email to an account you can access using Thunderbird. Open the message and look at the message source. Is it really plain text? What do the headers say it is? On Mon, Oct 12, 2009 at 1:11 PM, Naftoli Gugenheim naftoli...@gmail.comwrote: Hi. I'm sending an email using PlainMailBodyType that contains a URL. Normally when a BlackBerry receives a plain text email it automatically hyperlinks URLS and potential phone numbers. For some reason this email is not being hyperlinked on the BlackBerry. Is it possible that it's somehow not purely plain text? How would I solve this? I don't want to send HTML messages because some recipients may not be able to view it. 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 Surf the harmonics --~--~-~--~~~---~--~~ 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] net.liftweb.http.LiftFilter is not a javax.servlet.Filter
Hey guys, I've been having a crazy problem all day (and now into the extremely late night). Basically, Jetty is throwing this error: jvm 1| java.lang.IllegalStateException: class net.liftweb.http.LiftFilter is not a javax.servlet.Filter jvm 1| at org.mortbay.jetty.servlet.FilterHolder.doStart (FilterHolder.java:88) jvm 1| at org.mortbay.component.AbstractLifeCycle.start (AbstractLifeCycle.java:50) jvm 1| at org.mortbay.jetty.servlet.ServletHandler.initialize (ServletHandler.java:662) jvm 1| at org.mortbay.jetty.servlet.Context.startContext (Context.java:140) jvm 1| at org.mortbay.jetty.webapp.WebAppContext.startContext (WebAppContext.java:1250) jvm 1| at org.mortbay.jetty.handler.ContextHandler.doStart (ContextHandler.java:517) jvm 1| at org.mortbay.jetty.webapp.WebAppContext.doStart (WebAppContext.java:467) jvm 1| at org.mortbay.component.AbstractLifeCycle.start (AbstractLifeCycle.java:50) jvm 1| at org.mortbay.jetty.handler.HandlerWrapper.doStart (HandlerWrapper.java:130) jvm 1| at org.mortbay.jetty.Server.doStart(Server.java:224) jvm 1| at org.mortbay.component.AbstractLifeCycle.start (AbstractLifeCycle.java:50) jvm 1| at Launcher.main(Launcher.java:53) jvm 1| at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) jvm 1| at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) jvm 1| at sun.reflect.DelegatingMethodAccessorImpl.invoke (Unknown Source) jvm 1| at java.lang.reflect.Method.invoke(Unknown Source) jvm 1| at org.tanukisoftware.wrapper.WrapperJarApp.run (WrapperJarApp.java:358) jvm 1| at java.lang.Thread.run(Unknown Source) jvm 1| 2009-10-13 01:10:12.781::INFO: Started selectchannelconnec...@0.0.0.0:9090 I must confess, Im running a fairly specific config. Essentially I have an executable WAR file that has a jetty launcher class inside - its pretty sweet, and it works from the command line doing: java -jar myapp.war However, when I go to implement it with JWS I get this error. Any help would be really, really welcome Cheers, Tim --~--~-~--~~~---~--~~ 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: net.liftweb.http.LiftFilter is not a javax.servlet.Filter
My top-of-the-brain guess would be that you have two servlet JARs in your classpath, and jetty is using one but your WAR is using another. Really weird error though, for sure. -Ross On Oct 12, 2009, at 8:14 PM, Timothy Perrett wrote: Hey guys, I've been having a crazy problem all day (and now into the extremely late night). Basically, Jetty is throwing this error: jvm 1| java.lang.IllegalStateException: class net.liftweb.http.LiftFilter is not a javax.servlet.Filter jvm 1| at org.mortbay.jetty.servlet.FilterHolder.doStart (FilterHolder.java:88) jvm 1| at org.mortbay.component.AbstractLifeCycle.start (AbstractLifeCycle.java:50) jvm 1| at org.mortbay.jetty.servlet.ServletHandler.initialize (ServletHandler.java:662) jvm 1| at org.mortbay.jetty.servlet.Context.startContext (Context.java:140) jvm 1| at org.mortbay.jetty.webapp.WebAppContext.startContext (WebAppContext.java:1250) jvm 1| at org.mortbay.jetty.handler.ContextHandler.doStart (ContextHandler.java:517) jvm 1| at org.mortbay.jetty.webapp.WebAppContext.doStart (WebAppContext.java:467) jvm 1| at org.mortbay.component.AbstractLifeCycle.start (AbstractLifeCycle.java:50) jvm 1| at org.mortbay.jetty.handler.HandlerWrapper.doStart (HandlerWrapper.java:130) jvm 1| at org.mortbay.jetty.Server.doStart(Server.java:224) jvm 1| at org.mortbay.component.AbstractLifeCycle.start (AbstractLifeCycle.java:50) jvm 1| at Launcher.main(Launcher.java:53) jvm 1| at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) jvm 1| at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) jvm 1| at sun.reflect.DelegatingMethodAccessorImpl.invoke (Unknown Source) jvm 1| at java.lang.reflect.Method.invoke(Unknown Source) jvm 1| at org.tanukisoftware.wrapper.WrapperJarApp.run (WrapperJarApp.java:358) jvm 1| at java.lang.Thread.run(Unknown Source) jvm 1| 2009-10-13 01:10:12.781::INFO: Started selectchannelconnec...@0.0.0.0:9090 I must confess, Im running a fairly specific config. Essentially I have an executable WAR file that has a jetty launcher class inside - its pretty sweet, and it works from the command line doing: java -jar myapp.war However, when I go to implement it with JWS I get this error. Any help would be really, really welcome Cheers, Tim --~--~-~--~~~---~--~~ 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: net.liftweb.http.LiftFilter is not a javax.servlet.Filter
Hey Ross, Thanks for the response - I'll just take a look; im using maven-shade but thought id been careful about making sure i only had one javax.servlet I'll just double check now. Cheers, Tim On Oct 13, 1:22 am, Ross Mellgren dri...@gmail.com wrote: My top-of-the-brain guess would be that you have two servlet JARs in your classpath, and jetty is using one but your WAR is using another. Really weird error though, for sure. -Ross On Oct 12, 2009, at 8:14 PM, Timothy Perrett wrote: Hey guys, I've been having a crazy problem all day (and now into the extremely late night). Basically, Jetty is throwing this error: jvm 1 | java.lang.IllegalStateException: class net.liftweb.http.LiftFilter is not a javax.servlet.Filter jvm 1 | at org.mortbay.jetty.servlet.FilterHolder.doStart (FilterHolder.java:88) jvm 1 | at org.mortbay.component.AbstractLifeCycle.start (AbstractLifeCycle.java:50) jvm 1 | at org.mortbay.jetty.servlet.ServletHandler.initialize (ServletHandler.java:662) jvm 1 | at org.mortbay.jetty.servlet.Context.startContext (Context.java:140) jvm 1 | at org.mortbay.jetty.webapp.WebAppContext.startContext (WebAppContext.java:1250) jvm 1 | at org.mortbay.jetty.handler.ContextHandler.doStart (ContextHandler.java:517) jvm 1 | at org.mortbay.jetty.webapp.WebAppContext.doStart (WebAppContext.java:467) jvm 1 | at org.mortbay.component.AbstractLifeCycle.start (AbstractLifeCycle.java:50) jvm 1 | at org.mortbay.jetty.handler.HandlerWrapper.doStart (HandlerWrapper.java:130) jvm 1 | at org.mortbay.jetty.Server.doStart(Server.java:224) jvm 1 | at org.mortbay.component.AbstractLifeCycle.start (AbstractLifeCycle.java:50) jvm 1 | at Launcher.main(Launcher.java:53) jvm 1 | at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) jvm 1 | at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) jvm 1 | at sun.reflect.DelegatingMethodAccessorImpl.invoke (Unknown Source) jvm 1 | at java.lang.reflect.Method.invoke(Unknown Source) jvm 1 | at org.tanukisoftware.wrapper.WrapperJarApp.run (WrapperJarApp.java:358) jvm 1 | at java.lang.Thread.run(Unknown Source) jvm 1 | 2009-10-13 01:10:12.781::INFO: Started selectchannelconnec...@0.0.0.0:9090 I must confess, Im running a fairly specific config. Essentially I have an executable WAR file that has a jetty launcher class inside - its pretty sweet, and it works from the command line doing: java -jar myapp.war However, when I go to implement it with JWS I get this error. Any help would be really, really welcome Cheers, Tim --~--~-~--~~~---~--~~ 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] Unused binding values for lift:bind
I recently started getting this warning my log, after I started using more than one bind position in my default template. Looking at the code, it looks like it will (erroneously?) warn any time there is more than one bind point and you are in dev mode: 20:18:53,987 [http-0.0.0.0-28543-1] WARN lift - Unused binding values for lift:bind: content 20:18:53,987 [http-0.0.0.0-28543-1] WARN lift - Unused binding values for lift:bind: title This is the branch of BindHelpers that looks to be causing it: case Some(nodes) = { if (Props.devMode vals.size 1) { warnOnUnused() } nodes } There is another place where warnOnUnused is used in the same one, but it gives an adjacent log message I'm not seeing. This is the definition of warnOnUnused: def warnOnUnused() = Log.warn(Unused binding values for lift:bind: + vals.keySet.filter(key = key != ns.text).mkString(, )) This seems incorrect -- any time it hits a lift:bind node, I think it'll log this warning for every other bound value that isn't the current one. Should I file a ticket? Is this an actual warning and I'm misreading? The template is working correctly. -Ross --~--~-~--~~~---~--~~ 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: net.liftweb.http.LiftFilter is not a javax.servlet.Filter
Nope, I've certainly only got 1 javax.servlet in my CP. Looking at the Jetty source: http://jetty.mortbay.com/xref/org/mortbay/jetty/servlet/FilterHolder.html#86 It appears its using isAssignableFrom - the question is, that how can it find the filter class usually, and be fine, but not when its being called by the wrapper? Cheers, Tim On Oct 13, 1:26 am, Timothy Perrett timo...@getintheloop.eu wrote: Hey Ross, Thanks for the response - I'll just take a look; im using maven-shade but thought id been careful about making sure i only had one javax.servlet I'll just double check now. Cheers, Tim On Oct 13, 1:22 am, Ross Mellgren dri...@gmail.com wrote: My top-of-the-brain guess would be that you have two servlet JARs in your classpath, and jetty is using one but your WAR is using another. Really weird error though, for sure. -Ross On Oct 12, 2009, at 8:14 PM, Timothy Perrett wrote: Hey guys, I've been having a crazy problem all day (and now into the extremely late night). Basically, Jetty is throwing this error: jvm 1 | java.lang.IllegalStateException: class net.liftweb.http.LiftFilter is not a javax.servlet.Filter jvm 1 | at org.mortbay.jetty.servlet.FilterHolder.doStart (FilterHolder.java:88) jvm 1 | at org.mortbay.component.AbstractLifeCycle.start (AbstractLifeCycle.java:50) jvm 1 | at org.mortbay.jetty.servlet.ServletHandler.initialize (ServletHandler.java:662) jvm 1 | at org.mortbay.jetty.servlet.Context.startContext (Context.java:140) jvm 1 | at org.mortbay.jetty.webapp.WebAppContext.startContext (WebAppContext.java:1250) jvm 1 | at org.mortbay.jetty.handler.ContextHandler.doStart (ContextHandler.java:517) jvm 1 | at org.mortbay.jetty.webapp.WebAppContext.doStart (WebAppContext.java:467) jvm 1 | at org.mortbay.component.AbstractLifeCycle.start (AbstractLifeCycle.java:50) jvm 1 | at org.mortbay.jetty.handler.HandlerWrapper.doStart (HandlerWrapper.java:130) jvm 1 | at org.mortbay.jetty.Server.doStart(Server.java:224) jvm 1 | at org.mortbay.component.AbstractLifeCycle.start (AbstractLifeCycle.java:50) jvm 1 | at Launcher.main(Launcher.java:53) jvm 1 | at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) jvm 1 | at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) jvm 1 | at sun.reflect.DelegatingMethodAccessorImpl.invoke (Unknown Source) jvm 1 | at java.lang.reflect.Method.invoke(Unknown Source) jvm 1 | at org.tanukisoftware.wrapper.WrapperJarApp.run (WrapperJarApp.java:358) jvm 1 | at java.lang.Thread.run(Unknown Source) jvm 1 | 2009-10-13 01:10:12.781::INFO: Started selectchannelconnec...@0.0.0.0:9090 I must confess, Im running a fairly specific config. Essentially I have an executable WAR file that has a jetty launcher class inside - its pretty sweet, and it works from the command line doing: java -jar myapp.war However, when I go to implement it with JWS I get this error. Any help would be really, really welcome Cheers, Tim --~--~-~--~~~---~--~~ 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: net.liftweb.http.LiftFilter is not a javax.servlet.Filter
Especially since it prints out the valid class name in the log message. I suppose you can't post the WAR somewhere so I can have a poke? -Ross On Oct 12, 2009, at 8:41 PM, Timothy Perrett wrote: Nope, I've certainly only got 1 javax.servlet in my CP. Looking at the Jetty source: http://jetty.mortbay.com/xref/org/mortbay/jetty/servlet/FilterHolder.html#86 It appears its using isAssignableFrom - the question is, that how can it find the filter class usually, and be fine, but not when its being called by the wrapper? Cheers, Tim On Oct 13, 1:26 am, Timothy Perrett timo...@getintheloop.eu wrote: Hey Ross, Thanks for the response - I'll just take a look; im using maven-shade but thought id been careful about making sure i only had one javax.servlet I'll just double check now. Cheers, Tim On Oct 13, 1:22 am, Ross Mellgren dri...@gmail.com wrote: My top-of-the-brain guess would be that you have two servlet JARs in your classpath, and jetty is using one but your WAR is using another. Really weird error though, for sure. -Ross On Oct 12, 2009, at 8:14 PM, Timothy Perrett wrote: Hey guys, I've been having a crazy problem all day (and now into the extremely late night). Basically, Jetty is throwing this error: jvm 1| java.lang.IllegalStateException: class net.liftweb.http.LiftFilter is not a javax.servlet.Filter jvm 1| at org.mortbay.jetty.servlet.FilterHolder.doStart (FilterHolder.java:88) jvm 1| at org.mortbay.component.AbstractLifeCycle.start (AbstractLifeCycle.java:50) jvm 1| at org.mortbay.jetty.servlet.ServletHandler.initialize (ServletHandler.java:662) jvm 1| at org.mortbay.jetty.servlet.Context.startContext (Context.java:140) jvm 1| at org.mortbay.jetty.webapp.WebAppContext.startContext (WebAppContext.java:1250) jvm 1| at org.mortbay.jetty.handler.ContextHandler.doStart (ContextHandler.java:517) jvm 1| at org.mortbay.jetty.webapp.WebAppContext.doStart (WebAppContext.java:467) jvm 1| at org.mortbay.component.AbstractLifeCycle.start (AbstractLifeCycle.java:50) jvm 1| at org.mortbay.jetty.handler.HandlerWrapper.doStart (HandlerWrapper.java:130) jvm 1| at org.mortbay.jetty.Server.doStart(Server.java: 224) jvm 1| at org.mortbay.component.AbstractLifeCycle.start (AbstractLifeCycle.java:50) jvm 1| at Launcher.main(Launcher.java:53) jvm 1| at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) jvm 1| at sun.reflect.NativeMethodAccessorImpl.invoke (Unknown Source) jvm 1| at sun.reflect.DelegatingMethodAccessorImpl.invoke (Unknown Source) jvm 1| at java.lang.reflect.Method.invoke(Unknown Source) jvm 1| at org.tanukisoftware.wrapper.WrapperJarApp.run (WrapperJarApp.java:358) jvm 1| at java.lang.Thread.run(Unknown Source) jvm 1| 2009-10-13 01:10:12.781::INFO: Started selectchannelconnec...@0.0.0.0:9090 I must confess, Im running a fairly specific config. Essentially I have an executable WAR file that has a jetty launcher class inside - its pretty sweet, and it works from the command line doing: java -jar myapp.war However, when I go to implement it with JWS I get this error. Any help would be really, really welcome Cheers, Tim --~--~-~--~~~---~--~~ 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: net.liftweb.http.LiftFilter is not a javax.servlet.Filter
I cant really post the war im afraid, as its calling all manner of services on some internal systems. The strange thing with all of this is that it works when you execute: java -jar myapp.war Here's what you should need to just make a similar demo project: https://gist.github.com/3ad5cd900bbe0012b147 - the first being the maven build and the 2nd being the launcher im using for jetty. Cheers, Tim On Oct 13, 1:47 am, Ross Mellgren dri...@gmail.com wrote: Especially since it prints out the valid class name in the log message. I suppose you can't post the WAR somewhere so I can have a poke? -Ross On Oct 12, 2009, at 8:41 PM, Timothy Perrett wrote: Nope, I've certainly only got 1 javax.servlet in my CP. Looking at the Jetty source: http://jetty.mortbay.com/xref/org/mortbay/jetty/servlet/FilterHolder It appears its using isAssignableFrom - the question is, that how can it find the filter class usually, and be fine, but not when its being called by the wrapper? Cheers, Tim On Oct 13, 1:26 am, Timothy Perrett timo...@getintheloop.eu wrote: Hey Ross, Thanks for the response - I'll just take a look; im using maven-shade but thought id been careful about making sure i only had one javax.servlet I'll just double check now. Cheers, Tim On Oct 13, 1:22 am, Ross Mellgren dri...@gmail.com wrote: My top-of-the-brain guess would be that you have two servlet JARs in your classpath, and jetty is using one but your WAR is using another. Really weird error though, for sure. -Ross On Oct 12, 2009, at 8:14 PM, Timothy Perrett wrote: Hey guys, I've been having a crazy problem all day (and now into the extremely late night). Basically, Jetty is throwing this error: jvm 1 | java.lang.IllegalStateException: class net.liftweb.http.LiftFilter is not a javax.servlet.Filter jvm 1 | at org.mortbay.jetty.servlet.FilterHolder.doStart (FilterHolder.java:88) jvm 1 | at org.mortbay.component.AbstractLifeCycle.start (AbstractLifeCycle.java:50) jvm 1 | at org.mortbay.jetty.servlet.ServletHandler.initialize (ServletHandler.java:662) jvm 1 | at org.mortbay.jetty.servlet.Context.startContext (Context.java:140) jvm 1 | at org.mortbay.jetty.webapp.WebAppContext.startContext (WebAppContext.java:1250) jvm 1 | at org.mortbay.jetty.handler.ContextHandler.doStart (ContextHandler.java:517) jvm 1 | at org.mortbay.jetty.webapp.WebAppContext.doStart (WebAppContext.java:467) jvm 1 | at org.mortbay.component.AbstractLifeCycle.start (AbstractLifeCycle.java:50) jvm 1 | at org.mortbay.jetty.handler.HandlerWrapper.doStart (HandlerWrapper.java:130) jvm 1 | at org.mortbay.jetty.Server.doStart(Server.java: 224) jvm 1 | at org.mortbay.component.AbstractLifeCycle.start (AbstractLifeCycle.java:50) jvm 1 | at Launcher.main(Launcher.java:53) jvm 1 | at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) jvm 1 | at sun.reflect.NativeMethodAccessorImpl.invoke (Unknown Source) jvm 1 | at sun.reflect.DelegatingMethodAccessorImpl.invoke (Unknown Source) jvm 1 | at java.lang.reflect.Method.invoke(Unknown Source) jvm 1 | at org.tanukisoftware.wrapper.WrapperJarApp.run (WrapperJarApp.java:358) jvm 1 | at java.lang.Thread.run(Unknown Source) jvm 1 | 2009-10-13 01:10:12.781::INFO: Started selectchannelconnec...@0.0.0.0:9090 I must confess, Im running a fairly specific config. Essentially I have an executable WAR file that has a jetty launcher class inside - its pretty sweet, and it works from the command line doing: java -jar myapp.war However, when I go to implement it with JWS I get this error. Any help would be really, really welcome Cheers, Tim --~--~-~--~~~---~--~~ 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: net.liftweb.http.LiftFilter is not a javax.servlet.Filter
Wouldn't know, but have you tried looking up the source code that throws the exception? Is Jetty trying to do anything unusual? On Mon, Oct 12, 2009 at 8:14 PM, Timothy Perrett timo...@getintheloop.eu wrote: Hey guys, I've been having a crazy problem all day (and now into the extremely late night). Basically, Jetty is throwing this error: jvm 1 | java.lang.IllegalStateException: class net.liftweb.http.LiftFilter is not a javax.servlet.Filter jvm 1 | at org.mortbay.jetty.servlet.FilterHolder.doStart (FilterHolder.java:88) jvm 1 | at org.mortbay.component.AbstractLifeCycle.start (AbstractLifeCycle.java:50) jvm 1 | at org.mortbay.jetty.servlet.ServletHandler.initialize (ServletHandler.java:662) jvm 1 | at org.mortbay.jetty.servlet.Context.startContext (Context.java:140) jvm 1 | at org.mortbay.jetty.webapp.WebAppContext.startContext (WebAppContext.java:1250) jvm 1 | at org.mortbay.jetty.handler.ContextHandler.doStart (ContextHandler.java:517) jvm 1 | at org.mortbay.jetty.webapp.WebAppContext.doStart (WebAppContext.java:467) jvm 1 | at org.mortbay.component.AbstractLifeCycle.start (AbstractLifeCycle.java:50) jvm 1 | at org.mortbay.jetty.handler.HandlerWrapper.doStart (HandlerWrapper.java:130) jvm 1 | at org.mortbay.jetty.Server.doStart(Server.java:224) jvm 1 | at org.mortbay.component.AbstractLifeCycle.start (AbstractLifeCycle.java:50) jvm 1 | at Launcher.main(Launcher.java:53) jvm 1 | at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) jvm 1 | at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) jvm 1 | at sun.reflect.DelegatingMethodAccessorImpl.invoke (Unknown Source) jvm 1 | at java.lang.reflect.Method.invoke(Unknown Source) jvm 1 | at org.tanukisoftware.wrapper.WrapperJarApp.run (WrapperJarApp.java:358) jvm 1 | at java.lang.Thread.run(Unknown Source) jvm 1 | 2009-10-13 01:10:12.781::INFO: Started selectchannelconnec...@0.0.0.0:9090 I must confess, Im running a fairly specific config. Essentially I have an executable WAR file that has a jetty launcher class inside - its pretty sweet, and it works from the command line doing: java -jar myapp.war However, when I go to implement it with JWS I get this error. Any help would be really, really welcome Cheers, Tim --~--~-~--~~~---~--~~ 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: URL in PlainMailBodyType to BlackBerry
Does this help? It's from GMail / Show original Delivered-To: naftoli...@gmail.com Received: by 10.86.30.11 with SMTP id d11cs12302fgd; Wed, 7 Oct 2009 12:28:57 -0700 (PDT) Received: by 10.229.19.149 with SMTP id a21mr391667qcb.29.1254943736364; Wed, 07 Oct 2009 12:28:56 -0700 (PDT) Return-Path: yehu...@lrbcol.org Received: from lrbcol (174-143-236-122.static.slicehost.net [174.143.236.122]) by mx.google.com with ESMTP id 1si71430296yxe.11.2009.10.07.12.28.55; Wed, 07 Oct 2009 12:28:56 -0700 (PDT) Received-SPF: neutral (google.com: 174.143.236.122 is neither permitted nor denied by best guess record for domain of yehu...@lrbcol.org) client-ip=174.143.236.122; Authentication-Results: mx.google.com; spf=neutral (google.com: 174.143.236.122 is neither permitted nor denied by best guess record for domain of yehu...@lrbcol.org) smtp.mail=yehu...@lrbcol.org Received: from lrbcol (localhost [127.0.0.1]) by lrbcol (Postfix) with ESMTP id CDB51A0055 for naftoli...@gmail.com; Wed, 7 Oct 2009 15:28:56 -0400 (EDT) From: yehu...@lrbcol.org To: naftoli...@gmail.com Message-ID: 2107786874.01254943736214.javamail.r...@lrbcol Subject: Detail of Transportation #843 MIME-Version: 1.0 Content-Type: multipart/alternative; boundary==_Part_0_1227069312.1254943735894 Date: Wed, 7 Oct 2009 15:28:56 -0400 (EDT) --=_Part_0_1227069312.1254943735894 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit naftuli gugenheim; 617 6st ; M: 7325342893; From : ; To : 39 hearth ct; Request URL: [TODO] --=_Part_0_1227069312.1254943735894-- On Mon, Oct 12, 2009 at 6:15 PM, David Pollak feeder.of.the.be...@gmail.com wrote: Please send some test email to an account you can access using Thunderbird. Open the message and look at the message source. Is it really plain text? What do the headers say it is? On Mon, Oct 12, 2009 at 1:11 PM, Naftoli Gugenheim naftoli...@gmail.com wrote: Hi. I'm sending an email using PlainMailBodyType that contains a URL. Normally when a BlackBerry receives a plain text email it automatically hyperlinks URLS and potential phone numbers. For some reason this email is not being hyperlinked on the BlackBerry. Is it possible that it's somehow not purely plain text? How would I solve this? I don't want to send HTML messages because some recipients may not be able to view it. 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 Surf the harmonics --~--~-~--~~~---~--~~ 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: net.liftweb.http.LiftFilter is not a javax.servlet.Filter
Before I go barking up the wrong tree, by JWS you mean Java Web Start or Java Web Services? I must confess, Im running a fairly specific config. Essentially I have an executable WAR file that has a jetty launcher class inside - its pretty sweet, and it works from the command line doing: java -jar myapp.war However, when I go to implement it with JWS I get this error. -Ross On Oct 12, 2009, at 9:05 PM, Timothy Perrett wrote: I cant really post the war im afraid, as its calling all manner of services on some internal systems. The strange thing with all of this is that it works when you execute: java -jar myapp.war Here's what you should need to just make a similar demo project: https://gist.github.com/3ad5cd900bbe0012b147 - the first being the maven build and the 2nd being the launcher im using for jetty. Cheers, Tim On Oct 13, 1:47 am, Ross Mellgren dri...@gmail.com wrote: Especially since it prints out the valid class name in the log message. I suppose you can't post the WAR somewhere so I can have a poke? -Ross On Oct 12, 2009, at 8:41 PM, Timothy Perrett wrote: Nope, I've certainly only got 1 javax.servlet in my CP. Looking at the Jetty source: http://jetty.mortbay.com/xref/org/mortbay/jetty/servlet/ FilterHolder It appears its using isAssignableFrom - the question is, that how can it find the filter class usually, and be fine, but not when its being called by the wrapper? Cheers, Tim On Oct 13, 1:26 am, Timothy Perrett timo...@getintheloop.eu wrote: Hey Ross, Thanks for the response - I'll just take a look; im using maven- shade but thought id been careful about making sure i only had one javax.servlet I'll just double check now. Cheers, Tim On Oct 13, 1:22 am, Ross Mellgren dri...@gmail.com wrote: My top-of-the-brain guess would be that you have two servlet JARs in your classpath, and jetty is using one but your WAR is using another. Really weird error though, for sure. -Ross On Oct 12, 2009, at 8:14 PM, Timothy Perrett wrote: Hey guys, I've been having a crazy problem all day (and now into the extremely late night). Basically, Jetty is throwing this error: jvm 1| java.lang.IllegalStateException: class net.liftweb.http.LiftFilter is not a javax.servlet.Filter jvm 1| at org.mortbay.jetty.servlet.FilterHolder.doStart (FilterHolder.java:88) jvm 1| at org.mortbay.component.AbstractLifeCycle.start (AbstractLifeCycle.java:50) jvm 1| at org.mortbay.jetty.servlet.ServletHandler.initialize (ServletHandler.java:662) jvm 1| at org.mortbay.jetty.servlet.Context.startContext (Context.java:140) jvm 1| at org.mortbay.jetty.webapp.WebAppContext.startContext (WebAppContext.java:1250) jvm 1| at org.mortbay.jetty.handler.ContextHandler.doStart (ContextHandler.java:517) jvm 1| at org.mortbay.jetty.webapp.WebAppContext.doStart (WebAppContext.java:467) jvm 1| at org.mortbay.component.AbstractLifeCycle.start (AbstractLifeCycle.java:50) jvm 1| at org.mortbay.jetty.handler.HandlerWrapper.doStart (HandlerWrapper.java:130) jvm 1| at org.mortbay.jetty.Server.doStart(Server.java: 224) jvm 1| at org.mortbay.component.AbstractLifeCycle.start (AbstractLifeCycle.java:50) jvm 1| at Launcher.main(Launcher.java:53) jvm 1| at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) jvm 1| at sun.reflect.NativeMethodAccessorImpl.invoke (Unknown Source) jvm 1| at sun.reflect.DelegatingMethodAccessorImpl.invoke (Unknown Source) jvm 1| at java.lang.reflect.Method.invoke(Unknown Source) jvm 1| at org.tanukisoftware.wrapper.WrapperJarApp.run (WrapperJarApp.java:358) jvm 1| at java.lang.Thread.run(Unknown Source) jvm 1| 2009-10-13 01:10:12.781::INFO: Started selectchannelconnec...@0.0.0.0:9090 I must confess, Im running a fairly specific config. Essentially I have an executable WAR file that has a jetty launcher class inside - its pretty sweet, and it works from the command line doing: java -jar myapp.war However, when I go to implement it with JWS I get this error. Any help would be really, really welcome Cheers, Tim --~--~-~--~~~---~--~~ 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: Extend the tables that like the migration in the Rails ?
Yeah, I have add this code in the Boot.scala. ### Schemifier.schemify(true, Log.infoF _, User) ### But i want to add a column into the user table (extend the user table) now, and how can i achieve this purpose. Ex: ### Original user table like this idemail first_name last_name 1 a...@b.comhelloworld ### But the user table need to extend (add a column, like this) idemail first_name last_name sex 1 a...@b.comhelloworld 0 ### I add this code in the User model and restart the server, the table don't change anything ! ### Schemifier.schemify(true, Log.infoF _, User) # in the Boot.scala class User extends MegaProtoUser[User] { ... object desc extends MappedPoliteString(this, 128) ... } ### How the liftweb can do this ? Cheers, Neil On Oct 12, 6:10 pm, Peter Robinett pe...@bubblefoundry.com wrote: Is User added to Schemefier in Boot.scala? It should look something like: Schemifier.schemify(true, Log.infoF _, User) Peter Robinett On Oct 12, 11:22 am, Neil.Lv anim...@gmail.com wrote: Hi all, I don't know whether there is a mechanism that like the migration of the Rails in the Liftweb, and how can we extend the table, such as add a column desc into a table users (OR user ?). I add this code in the User model and restart the server, the table don't change anything ! ### class User extends MegaProtoUser[User] { ... object desc extends MappedPoliteString(this, 128) ... } ### How can i do if i want to achieve this purpose ? Thanks for any suggestion! Cheers, Neil --~--~-~--~~~---~--~~ 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: URL in PlainMailBodyType to BlackBerry
That looks to be plain text, although it's using multipart encoding where it probably does not need to. -Ross On Oct 12, 2009, at 9:17 PM, Naftoli Gugenheim wrote: Does this help? It's from GMail / Show original Delivered-To: naftoli...@gmail.com Received: by 10.86.30.11 with SMTP id d11cs12302fgd; Wed, 7 Oct 2009 12:28:57 -0700 (PDT) Received: by 10.229.19.149 with SMTP id a21mr391667qcb. 29.1254943736364; Wed, 07 Oct 2009 12:28:56 -0700 (PDT) Return-Path: yehu...@lrbcol.org Received: from lrbcol (174-143-236-122.static.slicehost.net [174.143.236.122]) by mx.google.com with ESMTP id 1si71430296yxe. 11.2009.10.07.12.28.55; Wed, 07 Oct 2009 12:28:56 -0700 (PDT) Received-SPF: neutral (google.com: 174.143.236.122 is neither permitted nor denied by best guess record for domain of yehu...@lrbcol.org) client-ip=174.143.236.122; Authentication-Results: mx.google.com; spf=neutral (google.com: 174.143.236.122 is neither permitted nor denied by best guess record for domain of yehu...@lrbcol.org) smtp.mail=yehu...@lrbcol.org Received: from lrbcol (localhost [127.0.0.1]) by lrbcol (Postfix) with ESMTP id CDB51A0055 for naftoli...@gmail.com; Wed, 7 Oct 2009 15:28:56 -0400 (EDT) From: yehu...@lrbcol.org To: naftoli...@gmail.com Message-ID: 2107786874.01254943736214.javamail.r...@lrbcol Subject: Detail of Transportation #843 MIME-Version: 1.0 Content-Type: multipart/alternative; boundary==_Part_0_1227069312.1254943735894 Date: Wed, 7 Oct 2009 15:28:56 -0400 (EDT) --=_Part_0_1227069312.1254943735894 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit naftuli gugenheim; 617 6st ; M: 7325342893; From : ; To : 39 hearth ct; Request URL: [TODO] --=_Part_0_1227069312.1254943735894-- On Mon, Oct 12, 2009 at 6:15 PM, David Pollak feeder.of.the.be...@gmail.com wrote: Please send some test email to an account you can access using Thunderbird. Open the message and look at the message source. Is it really plain text? What do the headers say it is? On Mon, Oct 12, 2009 at 1:11 PM, Naftoli Gugenheim naftoli...@gmail.com wrote: Hi. I'm sending an email using PlainMailBodyType that contains a URL. Normally when a BlackBerry receives a plain text email it automatically hyperlinks URLS and potential phone numbers. For some reason this email is not being hyperlinked on the BlackBerry. Is it possible that it's somehow not purely plain text? How would I solve this? I don't want to send HTML messages because some recipients may not be able to view it. 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 Surf the harmonics --~--~-~--~~~---~--~~ 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: Use lift1.0 or 1.1 or 1.x to create a stable and large site(project) ?
Yeah, it works now ! Thanks very much ! Cheers, Neil On Oct 13, 1:32 am, David Pollak feeder.of.the.be...@gmail.com wrote: You have to include -DremoteRepositories=http://scala-tools.org/repo-* snapshots* in the command line. On Sun, Oct 11, 2009 at 7:41 PM, Neil.Lv anim...@gmail.com wrote: I used this command to create my project and was successfully. mvn archetype:generate -U -DarchetypeGroupId=net.liftweb - DarchetypeArtifactId=lift-archetype-blank -DarchetypeVersion=1.1-M6 -DgroupId=demo.helloworld -DartifactId=helloworld2 - Dversion=1.1-M6 If i use the 1.1-SNAPSHOT, some errors occur. [INFO] The desired archetype does not exist (net.liftweb:lift- archetype-blank:1.1-SNAPSHOT) Cheers, Neil On Oct 9, 9:32 pm, David Pollak feeder.of.the.be...@gmail.com wrote: I use Lift 1.1-SNAPSHOT on all the sites I work on (that's currently at 7). There's rarely breakage on SNAPSHOT. On Fri, Oct 9, 2009 at 3:01 AM, Neil.Lv anim...@gmail.com wrote: Hi liftweb, Is anyone has used lift to create a stable and large site ? If i want to create this site which version that is suit, lift1.0 or higher version. If someone knows the site that develop by lift or has used lift to create a site, could you give me some ideas? Thanks very much! Cheers, Neil -- Lift, the simply functional web frameworkhttp://liftweb.net Beginning Scalahttp://www.apress.com/book/view/1430219890 Follow me:http://twitter.com/dpp Surf the harmonics -- Lift, the simply functional web frameworkhttp://liftweb.net Beginning Scalahttp://www.apress.com/book/view/1430219890 Follow me:http://twitter.com/dpp Surf the harmonics --~--~-~--~~~---~--~~ 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: Extend the tables that like the migration in the Rails ?
Just add the column to the User model. Schemifier will add the column to the RDBMS. On Mon, Oct 12, 2009 at 6:20 PM, Neil.Lv anim...@gmail.com wrote: Yeah, I have add this code in the Boot.scala. ### Schemifier.schemify(true, Log.infoF _, User) ### But i want to add a column into the user table (extend the user table) now, and how can i achieve this purpose. Ex: ### Original user table like this idemail first_name last_name 1 a...@b.comhelloworld ### But the user table need to extend (add a column, like this) idemail first_name last_name sex 1 a...@b.comhelloworld 0 ### I add this code in the User model and restart the server, the table don't change anything ! ### Schemifier.schemify(true, Log.infoF _, User) # in the Boot.scala class User extends MegaProtoUser[User] { ... object desc extends MappedPoliteString(this, 128) ... } ### How the liftweb can do this ? Cheers, Neil On Oct 12, 6:10 pm, Peter Robinett pe...@bubblefoundry.com wrote: Is User added to Schemefier in Boot.scala? It should look something like: Schemifier.schemify(true, Log.infoF _, User) Peter Robinett On Oct 12, 11:22 am, Neil.Lv anim...@gmail.com wrote: Hi all, I don't know whether there is a mechanism that like the migration of the Rails in the Liftweb, and how can we extend the table, such as add a column desc into a table users (OR user ?). I add this code in the User model and restart the server, the table don't change anything ! ### class User extends MegaProtoUser[User] { ... object desc extends MappedPoliteString(this, 128) ... } ### How can i do if i want to achieve this purpose ? Thanks for any suggestion! Cheers, Neil -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Surf the harmonics --~--~-~--~~~---~--~~ 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: Extend the tables that like the migration in the Rails ?
Yeah, I see it now, and it works ! 1): ### I add a column in the User model, like this class User extends MegaProtoUser[User] { ... /* add column dos4 */ object dos4 extends MappedBoolean(this) ... } result: INFO - ALTER TABLE users ADD COLUMN do4 SMALLINT ### 2): ### I remove a column in the User model, like this class User extends MegaProtoUser[User] { ... /* remove column dos4 */ /* object dos4 extends MappedBoolean(this) */ ... } result: Don't remove the cloumn dos4. ### 3): How can i remove the column in the liftweb (change the structure of the table), just like the execute raw SQL statement. execute(SELECT * from users) # Rails code in Migration On Oct 13, 10:16 am, David Pollak feeder.of.the.be...@gmail.com wrote: Just add the column to the User model. Schemifier will add the column to the RDBMS. On Mon, Oct 12, 2009 at 6:20 PM, Neil.Lv anim...@gmail.com wrote: Yeah, I have add this code in the Boot.scala. ### Schemifier.schemify(true, Log.infoF _, User) ### But i want to add a column into the user table (extend the user table) now, and how can i achieve this purpose. Ex: ### Original user table like this idemail first_name last_name 1 a...@b.comhelloworld ### But the user table need to extend (add a column, like this) idemail first_name last_name sex 1 a...@b.comhelloworld 0 ### I add this code in the User model and restart the server, the table don't change anything ! ### Schemifier.schemify(true, Log.infoF _, User) # in the Boot.scala class User extends MegaProtoUser[User] { ... object desc extends MappedPoliteString(this, 128) ... } ### How the liftweb can do this ? Cheers, Neil On Oct 12, 6:10 pm, Peter Robinett pe...@bubblefoundry.com wrote: Is User added to Schemefier in Boot.scala? It should look something like: Schemifier.schemify(true, Log.infoF _, User) Peter Robinett On Oct 12, 11:22 am, Neil.Lv anim...@gmail.com wrote: Hi all, I don't know whether there is a mechanism that like the migration of the Rails in the Liftweb, and how can we extend the table, such as add a column desc into a table users (OR user ?). I add this code in the User model and restart the server, the table don't change anything ! ### class User extends MegaProtoUser[User] { ... object desc extends MappedPoliteString(this, 128) ... } ### How can i do if i want to achieve this purpose ? Thanks for any suggestion! Cheers, Neil -- Lift, the simply functional web frameworkhttp://liftweb.net Beginning Scalahttp://www.apress.com/book/view/1430219890 Follow me:http://twitter.com/dpp Surf the harmonics --~--~-~--~~~---~--~~ 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: URL in PlainMailBodyType to BlackBerry
On Mon, Oct 12, 2009 at 6:17 PM, Naftoli Gugenheim naftoli...@gmail.comwrote: Does this help? It's from GMail / Show original GMail munges things, so I don't know if that's the original message. You might want to figure out what the specs are for blackberry to convert messages and see why this kind of message is not being converted. Delivered-To: naftoli...@gmail.com Received: by 10.86.30.11 with SMTP id d11cs12302fgd; Wed, 7 Oct 2009 12:28:57 -0700 (PDT) Received: by 10.229.19.149 with SMTP id a21mr391667qcb.29.1254943736364; Wed, 07 Oct 2009 12:28:56 -0700 (PDT) Return-Path: yehu...@lrbcol.org Received: from lrbcol (174-143-236-122.static.slicehost.net[174.143.236.122]) by mx.google.com with ESMTP id 1si71430296yxe.11.2009.10.07.12.28.55; Wed, 07 Oct 2009 12:28:56 -0700 (PDT) Received-SPF: neutral (google.com: 174.143.236.122 is neither permitted nor denied by best guess record for domain of yehu...@lrbcol.org) client-ip=174.143.236.122; Authentication-Results: mx.google.com; spf=neutral (google.com: 174.143.236.122 is neither permitted nor denied by best guess record for domain of yehu...@lrbcol.org) smtp.mail=yehu...@lrbcol.org Received: from lrbcol (localhost [127.0.0.1]) by lrbcol (Postfix) with ESMTP id CDB51A0055 for naftoli...@gmail.com; Wed, 7 Oct 2009 15:28:56 -0400 (EDT) From: yehu...@lrbcol.org To: naftoli...@gmail.com Message-ID: 2107786874.01254943736214.javamail.r...@lrbcol Subject: Detail of Transportation #843 MIME-Version: 1.0 Content-Type: multipart/alternative; boundary==_Part_0_1227069312.1254943735894 Date: Wed, 7 Oct 2009 15:28:56 -0400 (EDT) --=_Part_0_1227069312.1254943735894 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit naftuli gugenheim; 617 6st ; M: 7325342893; From : ; To : 39 hearth ct; Request URL: [TODO] --=_Part_0_1227069312.1254943735894-- On Mon, Oct 12, 2009 at 6:15 PM, David Pollak feeder.of.the.be...@gmail.com wrote: Please send some test email to an account you can access using Thunderbird. Open the message and look at the message source. Is it really plain text? What do the headers say it is? On Mon, Oct 12, 2009 at 1:11 PM, Naftoli Gugenheim naftoli...@gmail.com wrote: Hi. I'm sending an email using PlainMailBodyType that contains a URL. Normally when a BlackBerry receives a plain text email it automatically hyperlinks URLS and potential phone numbers. For some reason this email is not being hyperlinked on the BlackBerry. Is it possible that it's somehow not purely plain text? How would I solve this? I don't want to send HTML messages because some recipients may not be able to view it. 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 Surf the harmonics -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Surf the harmonics --~--~-~--~~~---~--~~ 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: URL in PlainMailBodyType to BlackBerry
True, I may have to do that at some point, although I'm not super confident I'll find such specs. What do you say to Ross's comment? Why is it multipart? - David Pollakfeeder.of.the.be...@gmail.com wrote: On Mon, Oct 12, 2009 at 6:17 PM, Naftoli Gugenheim naftoli...@gmail.comwrote: Does this help? It's from GMail / Show original GMail munges things, so I don't know if that's the original message. You might want to figure out what the specs are for blackberry to convert messages and see why this kind of message is not being converted. Delivered-To: naftoli...@gmail.com Received: by 10.86.30.11 with SMTP id d11cs12302fgd; Wed, 7 Oct 2009 12:28:57 -0700 (PDT) Received: by 10.229.19.149 with SMTP id a21mr391667qcb.29.1254943736364; Wed, 07 Oct 2009 12:28:56 -0700 (PDT) Return-Path: yehu...@lrbcol.org Received: from lrbcol (174-143-236-122.static.slicehost.net[174.143.236.122]) by mx.google.com with ESMTP id 1si71430296yxe.11.2009.10.07.12.28.55; Wed, 07 Oct 2009 12:28:56 -0700 (PDT) Received-SPF: neutral (google.com: 174.143.236.122 is neither permitted nor denied by best guess record for domain of yehu...@lrbcol.org) client-ip=174.143.236.122; Authentication-Results: mx.google.com; spf=neutral (google.com: 174.143.236.122 is neither permitted nor denied by best guess record for domain of yehu...@lrbcol.org) smtp.mail=yehu...@lrbcol.org Received: from lrbcol (localhost [127.0.0.1]) by lrbcol (Postfix) with ESMTP id CDB51A0055 for naftoli...@gmail.com; Wed, 7 Oct 2009 15:28:56 -0400 (EDT) From: yehu...@lrbcol.org To: naftoli...@gmail.com Message-ID: 2107786874.01254943736214.javamail.r...@lrbcol Subject: Detail of Transportation #843 MIME-Version: 1.0 Content-Type: multipart/alternative; boundary==_Part_0_1227069312.1254943735894 Date: Wed, 7 Oct 2009 15:28:56 -0400 (EDT) --=_Part_0_1227069312.1254943735894 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit naftuli gugenheim; 617 6st ; M: 7325342893; From : ; To : 39 hearth ct; Request URL: [TODO] --=_Part_0_1227069312.1254943735894-- On Mon, Oct 12, 2009 at 6:15 PM, David Pollak feeder.of.the.be...@gmail.com wrote: Please send some test email to an account you can access using Thunderbird. Open the message and look at the message source. Is it really plain text? What do the headers say it is? On Mon, Oct 12, 2009 at 1:11 PM, Naftoli Gugenheim naftoli...@gmail.com wrote: Hi. I'm sending an email using PlainMailBodyType that contains a URL. Normally when a BlackBerry receives a plain text email it automatically hyperlinks URLS and potential phone numbers. For some reason this email is not being hyperlinked on the BlackBerry. Is it possible that it's somehow not purely plain text? How would I solve this? I don't want to send HTML messages because some recipients may not be able to view it. 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 Surf the harmonics -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Surf the harmonics --~--~-~--~~~---~--~~ 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: Why fields are declared as 'object' with Mapper/Record?
I've got a change on review board that will pick up vals and lazy vals that are MappedFields. See http://reviewboard.liftweb.net/r/40/ However, until certain defects in the Scala compiler ( https://lampsvn.epfl.ch/trac/scala/ticket/2463 and https://lampsvn.epfl.ch/trac/scala/ticket/1006) are fixed, these features are dangerous and should not be used. 2009/10/12 Oleg G. ojo...@gmail.com Very interesting reading, Naftoli! Thanks alot for such extensive explainations. I'm going to read your message again and again until i understand it all :) On 13 окт, 02:09, Naftoli Gugenheim naftoli...@gmail.com wrote: 1. Personally I would not take the approach of creating a totally new ORM with a completely new paradigm just to eliminate the object syntax. The first step, as with anything in life, is to define our goals. What exactly is it about the object syntax that's problematic? Is overridability a problem? Is reflection evil? Let's make a list of our objectives over here. In any case, I would take the following approach. Currently, the way Mapper works is as follows. Every Mapper instance delegates database actions to its MetaMapper instance, which, upon initialization, builds the information about its fields using reflection, including the list of fields and their names. Three reasons for the object approach were mentioned in this thread. 1. To allow access to members. It was mentioned that this is now possible with anonymous classes (val x = new Y { ... } ). What was not mentioned but I read elsewhere IIRC is that the latter is implemented by scalac via reflection. Not that that's the end of the world, especially as we're relying on reflection as it is. Also, at least the argument remains--allow one to choose whichever syntax one desires. On the other hand, if Mapper would not use reflection, objects, being lazy, would not be known about until initialized, thus requiring the user to manually reference them. 2. To disambiguate members that reference or return other fields. However, this argument assumes that the list of fields is built via reflection; maybe it should not be. 3. To allow the field names to become available via reflection. I don't there's any way around this other than a compiler plugin (or maybe scala.reflect.Code?) So my suggestion would require passing the field name to a constructor. On the other hand, as I mentioned in a previous post and will explain better below, passing this to the constructor can be eliminated. So the first reason basically says, since people may need to use 'object,' and objects are lazy and we won't necessarily know about them, we had better use reflection. On the other hand, if we use vals most of the time, the constructor itself can inform the MetaMapper of its existence, and if someone wants to use 'object' or 'lazy val' then they will be required to initialize it before using it with Mapper. The second reason is eliminated if we don't use reflection. The third reason remains valid but the question is how important it is, at the expense of preventing subclasses from overriding fields. If it is acceptable to eliminate the this parameter and instead require a field name parameter, then it would seem possible to use a val based system instead of an object + reflection system. Here is how it would work. class Field(name: String)(implicit meta: MetaModel) { meta.register(this)} class Model { implicit def meta = getSingleton} class MyModel extends Model { val field1 = new Field(firstname) // meta gets passed automatically val fieldRef = field1 // doesn't cause duplication because fields are registered on instantiation} val fieldX = new Field(lastname) // compiler error because no implicit MetaModel in scope val fieldY = new Field(xxx)(MyModelMeta) // works, but obviously a bad idea Two points. 1. The concept of the meta being passed implicitly could probably be implemented into the current system. The only thing it has to do with this discussion is that if you would have to pass 'this' and the field name it would be really verbose, so I'm just pointing out that we could have a non-reflection-based system with about the same verbosity that we use now, although we could make the current system less verbose too. 2. On the surface it would seem impossible to implement this in Mapper, because by not using reflection there's no way to get all the object members since objects are lazy. However since the reflection system only picks up objects and not vals, one could solve this as follows. As long as the same field cannot be registered twice, i.e., registration of a field skips it if it's already registered, there's no problem with allowing both methods to exist side by side. Let
[Lift] Re: Why fields are declared as 'object' with Mapper/Record?
After reading Naftoli's post i checked the way inner object laziness is implemented. And it appears to be not thread safe. Following code: class A { val a = 1 } class B { object b extends A } Generates getter for b as follows: public final B$b$ b(); Code: 0: aload_0 1: getfield#18; //Field b$module:LB$b$; 4: ifnonnull 19 7: aload_0 8: new #20; //class B$b$ 11: dup 12: aload_0 13: invokespecial #23; //Method B$b$.init:(LB;)V 16: putfield#18; //Field b$module:LB$b$; 19: aload_0 20: getfield#18; //Field b$module:LB$b$; 23: areturn Looks like its not synchronized? I also looked at lazy vals generated code (when i was thinking on val based Records) and dropped the idea because of synchronization for every single access to a field. --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---