[Lift] Re: Scope issues with CometActors
That did the trick, and I understand what is going on much better now. Thank you! For some reason my brain is having trouble adjusting to the idea that you can generate more sophisticated markup in Scala code. I'm still used to the world of JSF and the like where all the markup is in a separate (non-code) file and you use EL expressions to accomplish something similar, so this has been a good example for me. Thanks again, - Spencer On Thu, Aug 27, 2009 at 8:38 PM, David Pollak feeder.of.the.be...@gmail.com wrote: lift:comet type=YourCometClass name={person_number} / The optional name attribute allows you to have different comet actor names (e.g., one per person). You can retrieve the CometActor's name via the name method, which returns a Box[String]. In your CometActor, make sure to: override def lifespan = Full(5 minutes) This will make the particular CometActor go away if it does not appear on a page for a 5 minute span. This lets you have a different CometActor per person, but allows you to share a single CometActor instance for a given session for a given name across browser windows/tabs. I hope this helps and I'd suggest against using SessionVars for passing setup information to CometActors. On Thu, Aug 27, 2009 at 7:28 PM, Spencer Uresk sur...@gmail.com wrote: Hey all, I'm trying to build an app that takes advantage of the Comet support in Lift. This is a simple app that displays all messages from a given person and shows new messages as they are added. At first, I struggled with trying to pull the request parameter (the url looks like this - /person/1) into my CometActor, and then I found a message on the lift board that talked about the scope mismatch between the request scope and a CometActor, and recommends setting a session variable that the CometActor then reads. The scope mismatch makes sense to me, so I tried the suggested way of doing it, which worked. However, now when I go back to the home page and select another person to view messages for, I still see the the old messages. After some testing, it appears that CometActors on the same page are not re-created if there is one already active. I can't seem to find any method that gets called on it when the page is rendered either, and I am not sure how to update the state of the CometActor so that it retrieves the proper messages. Is there any documentation or examples for using CometActors in conjunction with a request parameter like that? Or is there a better way altogether for me to be doing this? Thank you, - Spencer -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Git some: http://github.com/dpp --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to liftweb@googlegroups.com To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/liftweb?hl=en -~--~~~~--~~--~--~---
[Lift] Re: has anyone seen this exception?
That error sounds like it's probably that the remote server is disconnecting prematurely, or is not handling Transfer-Encoding: Chunked as HttpURLConnection expects. Have you tried getting whatever URL it's trying with wget or curl? -Ross On Aug 27, 2009, at 7:28 PM, Jack Widman wrote: Here is the code I am using. The exception is happening at line 12, the line that goes line = br.readLine() The exception is happening alot. Any ideas? package com.authoritude.snippet import java.io.{InputStreamReader, BufferedInputStream, BufferedReader, OutputStreamWriter, InputStream} object StreamUtil { def streamToString(stream: InputStream): String = { val buf = new StringBuilder val br = new BufferedReader(new InputStreamReader(stream)) var line: String = null var eof = false while (! eof) { line = br.readLine() if (line == null) eof = true else buf.append(line).append(\n) } buf.toString } } On Thu, Aug 27, 2009 at 5:49 PM, David Pollak feeder.of.the.be...@gmail.com wrote: This happens sometimes when the client disconnects before the communications with the server is complete. I see them from time to time and they indicate to me that the Internet is a random place. On Thu, Aug 27, 2009 at 12:06 PM, jack jack.wid...@gmail.com wrote: Has anyone seen this error? I get it while transforming a Stream into a String. The stream is from an http request I just made. Message: java.io.IOException: Premature EOF sun.net.www.http.ChunkedInputStream.readAheadBlocking (ChunkedInputStream.java:556) sun.net.www.http.ChunkedInputStream.readAhead(ChunkedInputStream.java: 600) sun.net.www.http.ChunkedInputStream.read(ChunkedInputStream.java:687) java.io.FilterInputStream.read(FilterInputStream.java:133) sun.net.www.protocol.http.HttpURLConnection $HttpInputStream.read (HttpURLConnection.java:2419) sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:282) sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:324) sun.nio.cs.StreamDecoder.read(StreamDecoder.java:176) java.io.InputStreamReader.read(InputStreamReader.java:184) java.io.BufferedReader.fill(BufferedReader.java:153) java.io.BufferedReader.readLine(BufferedReader.java:316) java.io.BufferedReader.readLine(BufferedReader.java:379) com.abc.snippet.StreamUtil$.streamToString(StreamUtil.scala:12) -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Git some: http://github.com/dpp --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to liftweb@googlegroups.com To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/liftweb?hl=en -~--~~~~--~~--~--~---
[Lift] Re: Using Lift to build a Web Service and the PUT HTTP method??
On Thu, Aug 27, 2009 at 5:35 PM, Alan M alan.morten...@gmail.com wrote: I'm trying to use PUT with Lift and it seems to be working, except I can't find the content I put. I'm using jQuery on the front end (a custom front-end) and firebug seems to think the data gets sent. Although it doesn't show me the raw request, it adds a PUT tab that shows the key and value(I couldn't get PUT in jQuery to work without a key/value pair). So where should I look for this data in the req? I've used POST and GET before without problem, but I need to use PUT here. I looked in the body field and in the xml field (it is an xml string being PUT). BTW, I'm using Lift .11 and scala 2.7.2. Please either use Lift 1.0 or 1.1-SNAPSHOT. The query parameters are parsed the same way for PUTs and POSTs... If it's xml, you have to make sure the mime type is text/xml or the Req's xml parser will not try to parse it. If you still can't get it working, please post a sample runnable application and I'll take a look at it. So anyone doing this? If so where is the PUT data? Oh also should I upgrade Lift? Last time I did (from .9 to .11) it was a lot of work. Alan -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Git some: http://github.com/dpp --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to liftweb@googlegroups.com To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/liftweb?hl=en -~--~~~~--~~--~--~---
[Lift] Re: authentication and access control
I'm not sure you HTTP authentication is what your looking for. Lift has support for both BASIC and DIGEST authentication models (irrespective of any persistence technology) and you can grant access based on Roles defined as a hierarchical structure. See /examples/http-authentication application. As far as Mapper goes it has a built in ProtoUser implementation for login, registration, forgot password etc. Br's, Marius On Aug 28, 4:42 am, Chris Lewis burningodzi...@gmail.com wrote: Lift users, I'm curious what you all are using for user access control (Mapper users excluded). I'm seriously evaluating lift for a project that will use JPA. My full time job uses Spring Security, which while nice in that it stays out of the way, is too clunky for my tastes. I haven't dissected how lift implements it with Mapper, but wanted to ask the group first. Thanks! chris --~--~-~--~~~---~--~~ 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: authentication and access control
Chris, Are you thinking along the lines of JAAS or similar? As Marius said, we currently don't have a defined way of doing general purpose authentication within Lift apps Cheers, Tim Sent from my iPhone On 28 Aug 2009, at 08:14, marius d. marius.dan...@gmail.com wrote: I'm not sure you HTTP authentication is what your looking for. Lift has support for both BASIC and DIGEST authentication models (irrespective of any persistence technology) and you can grant access based on Roles defined as a hierarchical structure. See /examples/http-authentication application. As far as Mapper goes it has a built in ProtoUser implementation for login, registration, forgot password etc. Br's, Marius On Aug 28, 4:42 am, Chris Lewis burningodzi...@gmail.com wrote: Lift users, I'm curious what you all are using for user access control (Mapper users excluded). I'm seriously evaluating lift for a project that will use JPA. My full time job uses Spring Security, which while nice in that it stays out of the way, is too clunky for my tastes. I haven't dissected how lift implements it with Mapper, but wanted to ask the group first. Thanks! chris --~--~-~--~~~---~--~~ 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: error in http authetication and openid
Thanks Timothy That helped me out a lot but i have one doubt that as per given in liftbook code i used LiftRules. httpAuthProtectedResource.append but new code used prepend and secondly how can we apply the role based access to the user model so that when signing in we can implicitly know that this user has admin rights. Best On Aug 27, 3:47 pm, Timothy Perrett timo...@getintheloop.eu wrote: Please check: http://is.gd/2BwGf Can you check your code looks like that and if your still getting the problem? Cheers, Tim On 27/08/2009 11:34, iboy iboy1...@gmail.com wrote: Hi all i am new to scala and lift. while trying to do a sample project i tried to use httpauthentication code given in liftbook (7.14 authentication example) and i am getting following errors a) while using import auth._ error: value auth not found if i try using _root_.net.liftweb.http.auth._ i get error: value auth is not a member of package net.liftweb.http import _root_.net.liftweb.http.auth._ any help is appreciated i am using scala 2.7.3 final and maven 2.0.9 --~--~-~--~~~---~--~~ 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: Using Lift to build a Web Service and the PUT HTTP method??
If, for example, you are sending an id property, then you should be able to get it through the Req object via params: req.params(id) That's how I do it, but without seeing what you're sending, I can't be sure how you would do it. It works the same way as with POST, so I'm not sure why you can't see it. Can you post some code? Chas. Alan M wrote: I'm trying to use PUT with Lift and it seems to be working, except I can't find the content I put. I'm using jQuery on the front end (a custom front-end) and firebug seems to think the data gets sent. Although it doesn't show me the raw request, it adds a PUT tab that shows the key and value(I couldn't get PUT in jQuery to work without a key/value pair). So where should I look for this data in the req? I've used POST and GET before without problem, but I need to use PUT here. I looked in the body field and in the xml field (it is an xml string being PUT). BTW, I'm using Lift .11 and scala 2.7.2. So anyone doing this? If so where is the PUT data? Oh also should I upgrade Lift? Last time I did (from .9 to .11) it was a lot of work. Alan --~--~-~--~~~---~--~~ 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] How to do pagination in lift application...
Hi.. i am using lift ORM (mapper framework) and MS SQL server(2008) i want to do pagination in my application. i tried with to starAt() and maxRows() but this generate Limit query... And MSSQL server not support limit query (it uses top for same..) So how can i do pagination with Lift ORM and MSSQL Server Thanks -Pravin --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to liftweb@googlegroups.com To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/liftweb?hl=en -~--~~~~--~~--~--~---
[Lift] Re: how to use thread in lift
Why don't you use scala actors? ... and after you populate asynchronously the two lists do you need to report the lists back to client asynchronously (say Comet) or when the page is rendered? ... If it's the later that you'd probably need a count-down-latch or a cyclic barrier. Br's, Mairus On Aug 28, 12:05 pm, pravin pravinka...@gmail.com wrote: Hi, i want to use thread in my lift application. I have two Lists i.e. List1() and List2(); when i click on submit button i want to do following things - i am executing to method to populate above to list -; List1() = fun1(); List2() = fun2(); So i want to do above things with thread s thread 1 will do List1() = fun1(); and thread 2 will do List2() = fun2(); so i can increase performance of my application Note:serial execution is working Is this possible with lift --~--~-~--~~~---~--~~ 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] how to use thread in lift
Hi, i want to use thread in my lift application. I have two Lists i.e. List1() and List2(); when i click on submit button i want to do following things - i am executing to method to populate above to list -; List1() = fun1(); List2() = fun2(); So i want to do above things with thread s thread 1 will do List1() = fun1(); and thread 2 will do List2() = fun2(); so i can increase performance of my application Note:serial execution is working Is this possible with lift --~--~-~--~~~---~--~~ 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: error in http authetication and openid
It should not matter if its append or prepend (relatively speaking) as its a RuleSeq[T] OOTB, the HTTP Auth stuff has nothing to do with ProtoUser... you could probably knit them together, but that is not what it is designed to do from the starting blocks... Cheers, Tim On Aug 28, 8:09 am, iboy iboy1...@gmail.com wrote: Thanks Timothy That helped me out a lot but i have one doubt that as per given in liftbook code i used LiftRules. httpAuthProtectedResource.append but new code used prepend and secondly how can we apply the role based access to the user model so that when signing in we can implicitly know that this user has admin rights. Best On Aug 27, 3:47 pm, Timothy Perrett timo...@getintheloop.eu wrote: Please check: http://is.gd/2BwGf Can you check your code looks like that and if your still getting the problem? Cheers, Tim On 27/08/2009 11:34, iboy iboy1...@gmail.com wrote: Hi all i am new to scala and lift. while trying to do a sample project i tried to use httpauthentication code given in liftbook (7.14 authentication example) and i am getting following errors a) while using import auth._ error: value auth not found if i try using _root_.net.liftweb.http.auth._ i get error: value auth is not a member of package net.liftweb.http import _root_.net.liftweb.http.auth._ any help is appreciated i am using scala 2.7.3 final and maven 2.0.9 --~--~-~--~~~---~--~~ 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: Newbie Question design pattern for ORM in Lift
That looks very cool from a first glance. mvh Bjarte On Fri, Aug 28, 2009 at 5:04 AM, rstradlingryanstradl...@gmail.com wrote: git clone git://github.com/rstradling/DDLtoLiftORM.git is the location of the git code. http://github.com/rstradling/DDLtoLiftORM is the web address I hope this is helpful to others. On Aug 27, 3:13 pm, rstradling ryanstradl...@gmail.com wrote: Thanks for the answers everyone. What David hit upon about wanting objects to be subclassible is the conclusion I came to that would work..if it existed. I was hoping there was a way. :(. Well, I guess Naftoli has provided a possible solution but seems more involved than I have the experience for. I will resort to putting the stuff on the generated classes and let merge tools do the rest. Regarding sharing the codeI should be more specific in that it parses ddl. To be honest, I hope you all are not hoping for muchbut I will get it up on github and when I do will reply to this thread with the location. On Aug 27, 1:35 pm, David Pollak feeder.of.the.be...@gmail.com wrote: On Thu, Aug 27, 2009 at 10:26 AM, rstradling ryanstradl...@gmail.comwrote: With a parser combinator I wrote to parse .sql and it outputs scala orm files. Care to share? That'd be a pretty darned useful utility! Please note it is very specific to my needs (i.e. only works with certain grammars (INSERTS) but that particular grammar is all I needed to process at the time) but is written in a way that could be extended to the full grammar (at least that was my intent :).. So... the problem is that objects in Scala are not subclassible. What does this mean? For example: trait Foo { object bar extends AnyRef } trait MyFoo extends Foo { override object bar { def cantDoIt = sigh } } Back in the Scala 2.5 days, there was some talk about allowing this to happen, but it never did. So, unfortunately, I can't think of a way for your sql generator to create a superclass that could be subclassed and have the effect that you want. Sorry/ On Aug 27, 1:09 pm, Naftoli Gugenheim naftoli...@gmail.com wrote: How do you auto-generate them? On Thu, Aug 27, 2009 at 1:03 PM, rstradling ryanstradl...@gmail.com wrote: I am using Lift 1.0 with the Mapper ORM module from Lift. I am a newbie to Scala and Lift. I have auto-generated my ORM classes from a .sql file. Given that these classes are auto-generated I would prefer not to edit them directly and provide additional functionality via inheritance. Say I have the following... class StatGenerated extends LongKeyedMapper[StatGenerated] with IdPK { def getSingleton = StatGenerated object errors extends MappedLong(this) object hits extends MappedLong(this) object AB extends MappedLong(this) } object StatGenerated extends StatGenerated with LongKeyedMetaMapper [StatGenerated] { override def fieldOrder = List(errors, hits) } class Statistics extends StatGenerated { def GetBattingAverage(id : Long) : float = { val stat = Stat.findByKey(id) stat.hits/stat.AB } } Now what I would like to do is work with the Statistics class as my ORM object... But I believe everything that is ORM related is actually of type StatGenerated rather than Statistics. i.e. findByKey will return me a StatGenerated rather than a Statistics class. Is there any clever way around this that I am missing without either modifying the generated class or duplicating code? -- Lift, the simply functional web frameworkhttp://liftweb.net Beginning Scalahttp://www.apress.com/book/view/1430219890 Follow me:http://twitter.com/dpp Git some:http://github.com/dpp -- Bjarte Stien Karlsen Ronatoppen 6a, 4638 Kristiansand 95219547 MSN: m...@ibjarte.com --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to liftweb@googlegroups.com To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/liftweb?hl=en -~--~~~~--~~--~--~---
[Lift] Re: how to use thread in lift
Pravin, why not use scala actors? Cheers, Tim On 28/08/2009 10:05, pravin pravinka...@gmail.com wrote: Hi, i want to use thread in my lift application. I have two Lists i.e. List1() and List2(); when i click on submit button i want to do following things - i am executing to method to populate above to list -; List1() = fun1(); List2() = fun2(); So i want to do above things with thread s thread 1 will do List1() = fun1(); and thread 2 will do List2() = fun2(); so i can increase performance of my application Note:serial execution is working Is this possible with lift --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to liftweb@googlegroups.com To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/liftweb?hl=en -~--~~~~--~~--~--~---
[Lift] Re: how to use thread in lift
Are you sure you are increasing performance? --~--~-~--~~~---~--~~ 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: authentication and access control
Tim, No, just looking around at a higher level. Back to what I like about spring security, it stays entirely out of application code's way (as does the protouser stuff). I will look at those auth examples, and I will poke through (Mega)ProtoUser source (I'm more accustomed to having an application component manage access control, as opposed to http auth. On another note, are you using lift 1.1-M4? I used the jpa basic archetype last night and the web module is broken (mainly imports in Boot). Thanks again for your input! Timothy Perrett wrote: Chris, Are you thinking along the lines of JAAS or similar? As Marius said, we currently don't have a defined way of doing general purpose authentication within Lift apps Cheers, Tim Sent from my iPhone On 28 Aug 2009, at 08:14, marius d. marius.dan...@gmail.com wrote: I'm not sure you HTTP authentication is what your looking for. Lift has support for both BASIC and DIGEST authentication models (irrespective of any persistence technology) and you can grant access based on Roles defined as a hierarchical structure. See /examples/http-authentication application. As far as Mapper goes it has a built in ProtoUser implementation for login, registration, forgot password etc. Br's, Marius On Aug 28, 4:42 am, Chris Lewis burningodzi...@gmail.com wrote: Lift users, I'm curious what you all are using for user access control (Mapper users excluded). I'm seriously evaluating lift for a project that will use JPA. My full time job uses Spring Security, which while nice in that it stays out of the way, is too clunky for my tastes. I haven't dissected how lift implements it with Mapper, but wanted to ask the group first. Thanks! chris --~--~-~--~~~---~--~~ 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: authentication and access control
On Thu, Aug 27, 2009 at 6:42 PM, Chris Lewis burningodzi...@gmail.comwrote: Lift users, I'm curious what you all are using for user access control (Mapper users excluded). I'm seriously evaluating lift for a project that will use JPA. My full time job uses Spring Security, which while nice in that it stays out of the way, is too clunky for my tastes. I haven't dissected how lift implements it with Mapper, but wanted to ask the group first. Thanks! For HTML access control, Lift's SiteMap offers URL level protection of pages (and menu generation based on the access control rules.) For each Loc (location) in your sitemap, you can chain together If() and Unless() clauses to define what rules are applied to each page. These rules are based on invoking functions (e.g., User.superUser_?) and can be arbitrarily complex. For protecting non-sitemap resources (stuff that's served up via a custom dispatch [DispatchPF]), it's best practice to put a guard in the partial function: { case Req(api :: accounts :: Nil, _, GetRequest) if currentUserCanViewAccounts_? = renderAccounts _ } Hope this helps. chris -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Git some: http://github.com/dpp --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to liftweb@googlegroups.com To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/liftweb?hl=en -~--~~~~--~~--~--~---
[Lift] Re: How to do pagination in lift application...
Our support for SQL Server is not complete. Please file tickets with specific use cases at http://github.com/dpp/liftweb/issues We currently have little demand for SQL Server support. If you have an app that's greenlighted for production, please contact me off-list about it and we can talk about increasing the priority of SQL Server support. On Fri, Aug 28, 2009 at 2:10 AM, pravin pravinka...@gmail.com wrote: Hi.. i am using lift ORM (mapper framework) and MS SQL server(2008) i want to do pagination in my application. i tried with to starAt() and maxRows() but this generate Limit query... And MSSQL server not support limit query (it uses top for same..) So how can i do pagination with Lift ORM and MSSQL Server Thanks -Pravin -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Git some: http://github.com/dpp --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to liftweb@googlegroups.com To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/liftweb?hl=en -~--~~~~--~~--~--~---
[Lift] Re: error in http authetication and openid
I think you'll be best off protecting your resource with basic auth to determine who the user is but using sitemap (for HTML pages) and guards in partial functions (for web services) to enforce URL-level RBAC. On Fri, Aug 28, 2009 at 2:44 AM, Timothy Perrett timo...@getintheloop.euwrote: It should not matter if its append or prepend (relatively speaking) as its a RuleSeq[T] OOTB, the HTTP Auth stuff has nothing to do with ProtoUser... you could probably knit them together, but that is not what it is designed to do from the starting blocks... Cheers, Tim On Aug 28, 8:09 am, iboy iboy1...@gmail.com wrote: Thanks Timothy That helped me out a lot but i have one doubt that as per given in liftbook code i used LiftRules. httpAuthProtectedResource.append but new code used prepend and secondly how can we apply the role based access to the user model so that when signing in we can implicitly know that this user has admin rights. Best On Aug 27, 3:47 pm, Timothy Perrett timo...@getintheloop.eu wrote: Please check: http://is.gd/2BwGf Can you check your code looks like that and if your still getting the problem? Cheers, Tim On 27/08/2009 11:34, iboy iboy1...@gmail.com wrote: Hi all i am new to scala and lift. while trying to do a sample project i tried to use httpauthentication code given in liftbook (7.14 authentication example) and i am getting following errors a) while using import auth._ error: value auth not found if i try using _root_.net.liftweb.http.auth._ i get error: value auth is not a member of package net.liftweb.http import _root_.net.liftweb.http.auth._ any help is appreciated i am using scala 2.7.3 final and maven 2.0.9 -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Git some: http://github.com/dpp --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to liftweb@googlegroups.com To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/liftweb?hl=en -~--~~~~--~~--~--~---
[Lift] Re: Scope issues with CometActors
On Thu, Aug 27, 2009 at 11:24 PM, Spencer Uresk sur...@gmail.com wrote: That did the trick, and I understand what is going on much better now. Thank you! For some reason my brain is having trouble adjusting to the idea that you can generate more sophisticated markup in Scala code. I think it's okay to have non-display XML appear in your scala code. My pattern for something like this is to have view code that looks like: lift:PersonActor.select ... the view template to be passed to the comet actor goes here /lift:PersonActor.select And my Scala code looks like: class PersonActor { def select(in: NodeSeq): NodeSeq = lift:comet type=PersonComet name={calcName}{in}/lift:comet } Thus you're preserving the view code and using the PersonActor snippet to rewrite the view code to insert the correct name. It's also a reminder of why Lift's recursive view rendering is so powerful. Jorge Ortiz once likened it to a very verbose Lisp. But the fact that Lift's templating rules are applied to the results of snippets means that you have an awful lot of power. I'm still used to the world of JSF and the like where all the markup is in a separate (non-code) file and you use EL expressions to accomplish something similar, so this has been a good example for me. Thanks again, - Spencer On Thu, Aug 27, 2009 at 8:38 PM, David Pollak feeder.of.the.be...@gmail.com wrote: lift:comet type=YourCometClass name={person_number} / The optional name attribute allows you to have different comet actor names (e.g., one per person). You can retrieve the CometActor's name via the name method, which returns a Box[String]. In your CometActor, make sure to: override def lifespan = Full(5 minutes) This will make the particular CometActor go away if it does not appear on a page for a 5 minute span. This lets you have a different CometActor per person, but allows you to share a single CometActor instance for a given session for a given name across browser windows/tabs. I hope this helps and I'd suggest against using SessionVars for passing setup information to CometActors. On Thu, Aug 27, 2009 at 7:28 PM, Spencer Uresk sur...@gmail.com wrote: Hey all, I'm trying to build an app that takes advantage of the Comet support in Lift. This is a simple app that displays all messages from a given person and shows new messages as they are added. At first, I struggled with trying to pull the request parameter (the url looks like this - /person/1) into my CometActor, and then I found a message on the lift board that talked about the scope mismatch between the request scope and a CometActor, and recommends setting a session variable that the CometActor then reads. The scope mismatch makes sense to me, so I tried the suggested way of doing it, which worked. However, now when I go back to the home page and select another person to view messages for, I still see the the old messages. After some testing, it appears that CometActors on the same page are not re-created if there is one already active. I can't seem to find any method that gets called on it when the page is rendered either, and I am not sure how to update the state of the CometActor so that it retrieves the proper messages. Is there any documentation or examples for using CometActors in conjunction with a request parameter like that? Or is there a better way altogether for me to be doing this? Thank you, - Spencer -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Git some: http://github.com/dpp -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Git some: http://github.com/dpp --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to liftweb@googlegroups.com To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/liftweb?hl=en -~--~~~~--~~--~--~---
[Lift] Re: authentication and access control
A your talking about access control? That is something different. See DPP's response about that as his answer I believe is what you want. Regarding the JPA example I'll look at that - there have been some breaking changes in trunk recently so its likely that they have not been updated. Cheers, Tim On 28/08/2009 12:47, Chris Lewis burningodzi...@gmail.com wrote: Tim, No, just looking around at a higher level. Back to what I like about spring security, it stays entirely out of application code's way (as does the protouser stuff). I will look at those auth examples, and I will poke through (Mega)ProtoUser source (I'm more accustomed to having an application component manage access control, as opposed to http auth. On another note, are you using lift 1.1-M4? I used the jpa basic archetype last night and the web module is broken (mainly imports in Boot). Thanks again for your input! Timothy Perrett wrote: Chris, Are you thinking along the lines of JAAS or similar? As Marius said, we currently don't have a defined way of doing general purpose authentication within Lift apps Cheers, Tim Sent from my iPhone On 28 Aug 2009, at 08:14, marius d. marius.dan...@gmail.com wrote: I'm not sure you HTTP authentication is what your looking for. Lift has support for both BASIC and DIGEST authentication models (irrespective of any persistence technology) and you can grant access based on Roles defined as a hierarchical structure. See /examples/http-authentication application. As far as Mapper goes it has a built in ProtoUser implementation for login, registration, forgot password etc. Br's, Marius On Aug 28, 4:42 am, Chris Lewis burningodzi...@gmail.com wrote: Lift users, I'm curious what you all are using for user access control (Mapper users excluded). I'm seriously evaluating lift for a project that will use JPA. My full time job uses Spring Security, which while nice in that it stays out of the way, is too clunky for my tastes. I haven't dissected how lift implements it with Mapper, but wanted to ask the group first. Thanks! chris --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to liftweb@googlegroups.com To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/liftweb?hl=en -~--~~~~--~~--~--~---
[Lift] Re: how to use thread in lift
Using threads in Lift is the same as using threads in any JVM-based application. Scala has a particular friendly mechanism for dealing with threads called Actors (others have noted this). Combined with Futures, they make for some nice coding. Here's an example: import scala.actors._ import Actor._ object Actor1 extends Actor { def act = loop { react { case M1 = Thread.sleep(2000) reply((8 to 15).toList) } } this.start } object Actor2 extends Actor { def act = loop { react { case M1 = Thread.sleep(1000) reply((100 to 103).toList) } } this.start } val start = System.currentTimeMillis val f1 = Actor1 !! (M1, {case a: List[Int] = a}) println(Got a future from Actor 1: +f1) println(Time1: +(System.currentTimeMillis - start)) val f2 = Actor2 !! (M1, {case a: List[Int] = a}) println(Got a future from Actor 2: +f2) println(Time2: +(System.currentTimeMillis - start)) println(Answer: +(f1() ::: f2())) println(Took: +(System.currentTimeMillis - start)) The main thread sends messages to the two different actors and receives a Future from each. The time to receive the future is very short, but the thread blocks on the application of f1 and f2... waiting for the answers from the Actors. Hope you find this useful On Fri, Aug 28, 2009 at 2:05 AM, pravin pravinka...@gmail.com wrote: Hi, i want to use thread in my lift application. I have two Lists i.e. List1() and List2(); when i click on submit button i want to do following things - i am executing to method to populate above to list -; List1() = fun1(); List2() = fun2(); So i want to do above things with thread s thread 1 will do List1() = fun1(); and thread 2 will do List2() = fun2(); so i can increase performance of my application Note:serial execution is working Is this possible with lift -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Git some: http://github.com/dpp --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to liftweb@googlegroups.com To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/liftweb?hl=en -~--~~~~--~~--~--~---
[Lift] Re: (beginner question) Liftweb View folder
On Aug 27, 12:26 pm, David Pollak feeder.of.the.be...@gmail.com wrote: On Thu, Aug 27, 2009 at 9:49 AM, Daniel Nelson dpn53...@gmail.com wrote: Hello, *Problem* I'm new to Lift/Scala and trying to understand/experiment with Lift's View folder. I've not gotten past a 404 error on the browser (as it relates to the View folder; templates render fine). I'd suggest using Lift 1.1-SNAPSHOT... you would have likely gotten a polite error message. In this case, I believe you have to add XmlFun/index to your sitemap in Boot.scala *Background/Environment* I've been reading Exploring Lift (~Section 3.7) along with What's the 'View' folder for? fromhttp://wiki.liftweb.net/index.php/FAQ. Following are the URL and corresponding class (in the View Folder and adapted fromhttp://github.com/dpp/liftweb/... herehttp://github.com/dpp/liftweb/blob/be8f0c4ea9eb0f145e0452cc6100943b7f...). The server is maven/jetty. I'm struggling to find other reading materials/examples which highlight my error(s); any help is appreciated. Thanks! Dan ~~~ URL:http://localhost:8080/XmlFun/index package org.delreino.simplyLift.view import _root_.scala.xml.{Text, Node, NodeSeq} import _root_.net.liftweb.http._ import S._ import _root_.net.liftweb.util._ class XmlFun extends LiftView { def dispatch = Map(index - render _) def render = { println (XmlFun) Full( lift:surround with=default at=content pXMLFun/p /lift:surround) } } -- Lift, the simply functional web frameworkhttp://liftweb.net Beginning Scalahttp://www.apress.com/book/view/1430219890 Follow me:http://twitter.com/dpp Git some:http://github.com/dpp Yes; thank you very much, David. My gap was with sitemap's role in exposing/enabling the View folder. Thanks, Dan --~--~-~--~~~---~--~~ 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] Creating your own tags?
Guys, If I wanted to create my own set of custom tags that looked like: something:notlift attr=whatever / Ive not seen anyone ask this before and I know I cant use LiftTagPF to do it, so how would one go about doing such trickery? Can I still make use of lift goodness for snippets etc? 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: Mapper with custom id
I'm probably missing something here, but wouldn't putting those 5 lines of code into a trait work? trait ManualValue { /* allow user-defined primary key */ override def writePermission_? = true override def dbAutogenerated_? = false private var myDirty = false override def dirty_? = myDirty override def dirty_?(b : Boolean) = { myDirty = b; super.dirty_?(b) } } object myId extends MappedLongIndex(this) with ManualValue If that does work, I don't see any issue with adding that trait to the Mapper library for others to use... Derek On Tue, Aug 25, 2009 at 12:42 PM, Naftoli Gugenheim naftoli...@gmail.comwrote: On Tue, Aug 25, 2009 at 2:31 PM, David Pollak feeder.of.the.be...@gmail.com wrote: On Tue, Aug 25, 2009 at 10:56 AM, Naftoli Gugenheim naftoli...@gmail.com wrote: It definitely would have been an option, although it would have been more difficult due to the complex structure of the new database. But I want to understand why it can't work the way I thought it would. Peter provided code that allows you to override autogeneration of keys. Like I said, it doesn't make sense to add 5 lines of code to 13 mappers each just to make importing simpler. That code is good for a non-autogenerated primary key. Why does it work the way it does? Because in the nearly 3 year life of Mapper, you're the first person that's asked for the feature. Because the cost of changing Mapper to work differently (especially when there's a work-around) and testing it and making sure it doesn't break isn't worth it. Well, I can't argue with that... But is it really so complicated to change? Would the following not cover all the bases? 1) A private var on the mapper, _saved_? etc., initialized to false 2) When find etc. creates an instance it uses reflection to set this variable to true 3) When save is successful it sets this variable to true 4) def saved_? returns the value of the var. Wouldn't that be more accurate from a logical standpoint? I'm not coming from the angle of, I have a use case for a feature, but from, doesn't this use case bring out a hole in the logic and demonstrate that the index can be nondefault and still represent a new record (aside from MSAccess)? Regards --~--~-~--~~~---~--~~ 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: Implementing new datatypes into metamapper
Well, off the top of my head this may require some changes to the MetaMapper code to get working. Looking at the example PG code that you linked to, they use setObject on the PreparedStatement to insert CIDR objects. The problem is that the current MetaMapper code *always* uses the overload of setObject that takes the type parameter, and as you've discovered, there is no type for CIDR. We could maybe add a flag or special Type that tells MetaMapper to use the setObject without the type... Derek On Tue, Aug 25, 2009 at 9:18 PM, Franz Bettag fr...@bett.ag wrote: Hey guys, i've been successfull with lift so far, now i want to do some more in depth stuff. anyway, i am missing the postgresql cidr/ip datatypes. Since they mostly work like strings i did the following: import _root_.net.liftweb.mapper._ import _root_.net.liftweb.http.{S, FieldError} import _root_.java.sql.{ResultSet, Types} import _root_.java.util.regex._ import _root_.scala.xml.Text object MappedCIDR { val ipv4 = Pattern.compile(^25[0-5]|2[0-4]\\d|[01]\\d{2}|\\d{1,2})(\ \.(25[0-5]|2[0-4]\\d|[01]\\d{2}|\\d{1,2})){3}(/(3[012]|[12]\\d|\\d)$) val ipv6 = Pattern.compile(^\\w*\\:\\w*\\:\\w*$) def valid(ip: String): Boolean = ipv4.matcher(ip).matches || ipv6.matcher(ip).matches def validIPAddr_?(ip: String) = valid(ip) } class MappedCIDR[T:Mapper[T]](owner: T, maxLen: Int) extends MappedString[T](owner, maxLen) { /** * Get the JDBC SQL Type for this field */ def targetSQLType = Types.VARCHAR override def setFilter = notNull _ :: toLower _ :: trim _ :: super.setFilter override def validate = { ( if (MappedCIDR.ipv4.matcher(i_is_!).matches || MappedCIDR.ipv6.matcher(i_is_!).matches()) Nil else List(FieldError(this, Text(S.??(invalid.ip.address ) ::: super.validate } } The question is, how would one go about implementing a type which is not in sql.Types? ;) I found some jdbc driver extensions for that: http://oak.cats.ohiou.edu/~rf358197/jdbc/2/http://oak.cats.ohiou.edu/%7Erf358197/jdbc/2/ Patching the current driver is painless, but i am still not sure how to go on. Can anyone gimme some advice at what code i should look which would give me the best example for 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: has anyone seen this exception?
I'm able to get the page with wget, no problem. My application is making many hits to other sites. Maybe that has something to do with it. Also I am using Jetty in embedded mode. Is there a difference in performance and throughput with Jetty embedded vs non embedded? On Fri, Aug 28, 2009 at 12:20 AM, Ross Mellgren dri...@gmail.com wrote: That error sounds like it's probably that the remote server is disconnecting prematurely, or is not handling Transfer-Encoding: Chunked as HttpURLConnection expects. Have you tried getting whatever URL it's trying with wget or curl? -Ross On Aug 27, 2009, at 7:28 PM, Jack Widman wrote: Here is the code I am using. The exception is happening at line 12, the line that goes line = br.readLine() The exception is happening alot. Any ideas? package com.authoritude.snippet import java.io.{InputStreamReader, BufferedInputStream, BufferedReader, OutputStreamWriter, InputStream} object StreamUtil { def streamToString(stream: InputStream): String = { val buf = new StringBuilder val br = new BufferedReader(new InputStreamReader(stream)) var line: String = null var eof = false while (! eof) { line = br.readLine() if (line == null) eof = true else buf.append(line).append(\n) } buf.toString } } On Thu, Aug 27, 2009 at 5:49 PM, David Pollak feeder.of.the.be...@gmail.com wrote: This happens sometimes when the client disconnects before the communications with the server is complete. I see them from time to time and they indicate to me that the Internet is a random place. On Thu, Aug 27, 2009 at 12:06 PM, jack jack.wid...@gmail.com wrote: Has anyone seen this error? I get it while transforming a Stream into a String. The stream is from an http request I just made. Message: java.io.IOException: Premature EOF sun.net.www.http.ChunkedInputStream.readAheadBlocking (ChunkedInputStream.java:556) sun.net.www.http.ChunkedInputStream.readAhead (ChunkedInputStream.java: 600) sun.net.www.http.ChunkedInputStream.read (ChunkedInputStream.java:687) java.io.FilterInputStream.read(FilterInputStream.java:133) sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read (HttpURLConnection.java:2419) sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:282) sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:324) sun.nio.cs.StreamDecoder.read(StreamDecoder.java:176) java.io.InputStreamReader.read(InputStreamReader.java:184) java.io.BufferedReader.fill(BufferedReader.java:153) java.io.BufferedReader.readLine(BufferedReader.java:316) java.io.BufferedReader.readLine(BufferedReader.java:379) com.abc.snippet.StreamUtil$.streamToString(StreamUtil.scala:12) -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Git some: http://github.com/dpp --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to liftweb@googlegroups.com To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/liftweb?hl=en -~--~~~~--~~--~--~---
[Lift] Re: Db.addLogFunc
EXCELLENT WORK DEREK ! On Aug 28, 7:28 pm, Derek Chen-Becker dchenbec...@gmail.com wrote: Hi all, I've made a change to the Mapper logging functionality in wip-dcb-sql-log-wrappers. The DB.addLogFunc method has changed to: addLogFunc( f: (DBLog,Long) = Any) where DBLog is a new trait (below) and the Long corresponds to the *total* duration of a given DB execution method. DBLog is defined as: trait DBLog { ... private stuff up here ... /** Return a list of all of the DBStatementEntry instances in the log buffer */ def statementEntries : List[DBStatementEntry] = ... /** Return a list of all of the DBMetaEntry instances in the log buffer */ def metaEntries : List[DBMetaEntry] = ... /** Return all log buffer entries */ def allEntries : List[DBLogEntry] = ... } and we have some new event class/traits: trait DBLogEntry { def statement : String def duration : Long} object DBLogEntry { def unapply(obj : Any) = obj match { case entry : DBLogEntry = Some(entry.statement,entry.duration) case _ = None }} case class DBStatementEntry(statement : String, duration : Long) extends DBLogEntry case class DBMetaEntry(statement : String, duration : Long) extends DBLogEntry Statements are SQL statements, prepared or immediate, and meta entries correspond to things like getMaxRows, getGeneratedKeys, etc. As you can see, each individual statement records its own duration as well, so you can get fine-grained detail on all activity. An example log function in Boot could look like: DB.addLogFunc { case (query, time) = { Log.info(All queries took + time + ms: ) query.allEntries.foreach({ case DBLogEntry(stmt, duration) = Log.info(stmt + took + duration + ms)}) Log.info(End queries) } } And we get output like: INFO - All queries took 17ms: INFO - Exec update INSERT INTO users (lastname,locale,password_pw,password_slt,validated,uniqueid,timezone,firstname,email,superuser,textarea) VALUES (C,en_US,GzwLqDpmJ6TrECg06bGKvOAQxyc=,1JTAWGSSYLJHXASO,1,DU0G0RT3IFOA0NHSY5QQQTX42BOIHDGI,US/Mountain,D, d...@c.com,0,) : updated 1 rows took 9ms INFO - Get generated keys : rs = oracle.jdbc.driver.oraclereturnresult...@23f9e6e5 took 2ms INFO - Closed Statement took 0ms INFO - End queries Note that this code does introduce a breaking change if you're already using log functions, since the addLogFunc signature has changed. If I can get a review on the code before I merge to master I would appreciate it. Derek On Sat, Aug 15, 2009 at 8:02 AM, Derek Chen-Becker dchenbec...@gmail.comwrote: OK, a preliminary version of log wrappers is checked in on wip-dcb-sql-log-wrappers. I'll merge it on Tuesday if no one sees any problems with it. Derek On Tue, Aug 11, 2009 at 11:08 AM, Derek Chen-Becker dchenbec...@gmail.com wrote: Will do. On Tue, Aug 11, 2009 at 2:33 AM, marius d. marius.dan...@gmail.comwrote: Please do so. If you need any help for some reason (time availability etc.) please let me know. As a note probably the wrappers should be only only when there is at least one log function registered. Br's, Marius On Aug 6, 11:48 pm, Derek Chen-Becker dchenbec...@gmail.com wrote: If there's a consensus that we want our own JDBC wrappers I'll go ahead and write them. Derek On Thu, Aug 6, 2009 at 1:19 PM, marius d. marius.dan...@gmail.com wrote: Probably building our own wrappers would be more lightweight then 3-rd party. Jus' guessing Br's, Marius On Aug 6, 9:58 pm, Derek Chen-Becker dchenbec...@gmail.com wrote: Well, I started looking at it and determined that the only way for us to truly log the queries would be to essentially make our own wrappers over Statement and PreparedStatement. There are projects (log4jdbc, notably) that already do this, and in a transparent manner. I'm not sure that adding a whole bunch of SQL logging directly to Lift is better than leveraging some existing libraries to do it. Derek On Thu, Aug 6, 2009 at 11:03 AM, marius d. marius.dan...@gmail.com wrote: Yeah we're aware of that. That is based on toString application which is JDBC driver dependent. I think Derek started some work on this to correct this behavior. Derek ? Br's, Marius On Aug 6, 8:01 pm, jon jonhoff...@gmail.com wrote: Hi, I have the following in boot: DB.addLogFunc((query, len) = Log.info(The query: +query+ took +len+ milliseconds)) I was expecting the query parameter to be sql, but it's actually some sort of guid INFO - The query: 6839c016-0122-f09a-9c96-003844e8 took 5 milliseconds Any ideas? I'm running with derby. Thanks, Jon --~--~-~--~~~---~--~~ You received this message because you are
[Lift] Bug in HasManyThough causing unexpected deletions?
Tips are on TipLists based on TipListBinds. Tips are also hooked to a Venue: class Tip extends LongKeyedMapper[Tip] with IdPK { // other unrelated stuff stuff object venueid extends MappedLongForeignKey(this, Venue) object lists extends HasManyThrough(this, TipList, TipListBind, TipListBind.tipid, TipListBind.listid) } In an ajax request I am setting the venueid on a collection of Tips to Empty. This is, for somewhat confusing reasons, causing the Tip to be removed from the lists it is on (the TipListBindings are being deleted). I am fairly certain this is happening because of HasManyThrough. INFO - com.mysql.jdbc.preparedstatem...@2b48c3: UPDATE tips SET venueid = ** NOT SPECIFIED ** WHERE id = ** NOT SPECIFIED **:2ms INFO - com.mysql.jdbc.preparedstatem...@69827c: SELECT DISTINCT tipxlist.listid, tipxlist.id, tipxlist.tipid FROM tipxlist WHERE tipid = 21128 :1ms INFO - com.mysql.jdbc.preparedstatem...@69827c: SELECT DISTINCT tipxlist.listid, tipxlist.id, tipxlist.tipid FROM tipxlist WHERE tipid = ** NOT SPECIFIED ** :22ms INFO - com.mysql.jdbc.preparedstatem...@ca8d17: DELETE FROM tipxlist WHERE id = ** NOT SPECIFIED **:1ms Currently thinking through what's going on in HasManyThrough::afterUpdate -harryh --~--~-~--~~~---~--~~ 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: Bug in HasManyThough causing unexpected deletions?
Currently thinking through what's going on in HasManyThrough::afterUpdate override def afterUpdate { val current = through.findAll(By (throughFromField,owner.primaryKeyField)) val newKeys = new HashSet[ThroughType]; theSetList.foreach(i = newKeys += i) val toDelete = current.filter(c = !newKeys.contains (throughToField.actualField(c).is)) toDelete.foreach(_.delete_!) // function continues } Unless I'm misunderstanding something (a distinct possibility) newKeys will be (in my case) a HashSet[TipListBind] containing all the TipListBinds associated with my specifi Tip. But then when doing the filter it checks to see if newKeys contains a given long corresponding to (again, in my case) the listid on all the current TipListBinds. Since the types aren't right here, it will never contain this so toDelete will end up beind all of current, and all the bindings will always be deleted. Is this really what is happening here? -harryh --~--~-~--~~~---~--~~ 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: Creating your own tags?
On Fri, Aug 28, 2009 at 8:03 AM, Timothy Perrett timo...@getintheloop.euwrote: Guys, If I wanted to create my own set of custom tags that looked like: something:notlift attr=whatever / There's been some discussion of this feature in the past. The generally outcome is that cost of prefix/label soup would become very confusing because the views become tied to plugins (although this seems weird to me because views are tied to snippets.) I think in light of the modularization discussion and the potential for snippet name overlap, it might be having the discussion about supporting arbitrary tags and arbitrary attributes in Lift's templating system. Anybody have thoughts? Ive not seen anyone ask this before and I know I cant use LiftTagPF to do it, so how would one go about doing such trickery? Can I still make use of lift goodness for snippets etc? 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 Git some: http://github.com/dpp --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to liftweb@googlegroups.com To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/liftweb?hl=en -~--~~~~--~~--~--~---
[Lift] Re: weirdness with stateful snippets and multiple forms on the page
Yeah... that's a bug. I'll have a fix committed up in a few. Bug fix FTW! Thanks! -harryh --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to liftweb@googlegroups.com To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/liftweb?hl=en -~--~~~~--~~--~--~---
[Lift] Re: Db.addLogFunc
Hi all, I've made a change to the Mapper logging functionality in wip-dcb-sql-log-wrappers. The DB.addLogFunc method has changed to: addLogFunc( f: (DBLog,Long) = Any) where DBLog is a new trait (below) and the Long corresponds to the *total* duration of a given DB execution method. DBLog is defined as: trait DBLog { ... private stuff up here ... /** Return a list of all of the DBStatementEntry instances in the log buffer */ def statementEntries : List[DBStatementEntry] = ... /** Return a list of all of the DBMetaEntry instances in the log buffer */ def metaEntries : List[DBMetaEntry] = ... /** Return all log buffer entries */ def allEntries : List[DBLogEntry] = ... } and we have some new event class/traits: trait DBLogEntry { def statement : String def duration : Long } object DBLogEntry { def unapply(obj : Any) = obj match { case entry : DBLogEntry = Some(entry.statement,entry.duration) case _ = None } } case class DBStatementEntry(statement : String, duration : Long) extends DBLogEntry case class DBMetaEntry(statement : String, duration : Long) extends DBLogEntry Statements are SQL statements, prepared or immediate, and meta entries correspond to things like getMaxRows, getGeneratedKeys, etc. As you can see, each individual statement records its own duration as well, so you can get fine-grained detail on all activity. An example log function in Boot could look like: DB.addLogFunc { case (query, time) = { Log.info(All queries took + time + ms: ) query.allEntries.foreach({ case DBLogEntry(stmt, duration) = Log.info(stmt + took + duration + ms)}) Log.info(End queries) } } And we get output like: INFO - All queries took 17ms: INFO - Exec update INSERT INTO users (lastname,locale,password_pw,password_slt,validated,uniqueid,timezone,firstname,email,superuser,textarea) VALUES (C,en_US,GzwLqDpmJ6TrECg06bGKvOAQxyc=,1JTAWGSSYLJHXASO,1,DU0G0RT3IFOA0NHSY5QQQTX42BOIHDGI,US/Mountain,D, d...@c.com,0,) : updated 1 rows took 9ms INFO - Get generated keys : rs = oracle.jdbc.driver.oraclereturnresult...@23f9e6e5 took 2ms INFO - Closed Statement took 0ms INFO - End queries Note that this code does introduce a breaking change if you're already using log functions, since the addLogFunc signature has changed. If I can get a review on the code before I merge to master I would appreciate it. Derek On Sat, Aug 15, 2009 at 8:02 AM, Derek Chen-Becker dchenbec...@gmail.comwrote: OK, a preliminary version of log wrappers is checked in on wip-dcb-sql-log-wrappers. I'll merge it on Tuesday if no one sees any problems with it. Derek On Tue, Aug 11, 2009 at 11:08 AM, Derek Chen-Becker dchenbec...@gmail.com wrote: Will do. On Tue, Aug 11, 2009 at 2:33 AM, marius d. marius.dan...@gmail.comwrote: Please do so. If you need any help for some reason (time availability etc.) please let me know. As a note probably the wrappers should be only only when there is at least one log function registered. Br's, Marius On Aug 6, 11:48 pm, Derek Chen-Becker dchenbec...@gmail.com wrote: If there's a consensus that we want our own JDBC wrappers I'll go ahead and write them. Derek On Thu, Aug 6, 2009 at 1:19 PM, marius d. marius.dan...@gmail.com wrote: Probably building our own wrappers would be more lightweight then 3-rd party. Jus' guessing Br's, Marius On Aug 6, 9:58 pm, Derek Chen-Becker dchenbec...@gmail.com wrote: Well, I started looking at it and determined that the only way for us to truly log the queries would be to essentially make our own wrappers over Statement and PreparedStatement. There are projects (log4jdbc, notably) that already do this, and in a transparent manner. I'm not sure that adding a whole bunch of SQL logging directly to Lift is better than leveraging some existing libraries to do it. Derek On Thu, Aug 6, 2009 at 11:03 AM, marius d. marius.dan...@gmail.com wrote: Yeah we're aware of that. That is based on toString application which is JDBC driver dependent. I think Derek started some work on this to correct this behavior. Derek ? Br's, Marius On Aug 6, 8:01 pm, jon jonhoff...@gmail.com wrote: Hi, I have the following in boot: DB.addLogFunc((query, len) = Log.info(The query: +query+ took +len+ milliseconds)) I was expecting the query parameter to be sql, but it's actually some sort of guid INFO - The query: 6839c016-0122-f09a-9c96-003844e8 took 5 milliseconds Any ideas? I'm running with derby. Thanks, Jon --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to liftweb@googlegroups.com To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com For
[Lift] syntax question
This may be more of an HTML question, but since I haven't found an answer online, I'm working in Lift and I'm sure most people here can answer this easily I figured I'd ask. I am trying to create a dynamic HTML table, by looping through the rows and columns of the table and inserting variables from a two- dimensional array. my array is calls and is an Array[Array[Result]] The basic structure of the table that I want to create is: def resultTable: NodeSeq = { table border=1 for (r - 0 until analysis.slots.length) { tr for (c - 0 until test.testvars.length) { new CellType(calls(r)(c).output) } /tr } /table } I have a class CellType that returns a td variable content /td The resultTable method is in a snippet class and I am calling it from a separate HTML file. All other mechanisms are working well since I tested a simple trtdTEST/td/tr within the same method and it created the table as expected. Therefore, this is simply a syntax error. I know you have to use {} to isolate scala code/variables in HTML, but I'm not sure how to do that when the brackets are necessary for the loop. Thanks for the help, David --~--~-~--~~~---~--~~ 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: has anyone seen this exception?
On Fri, Aug 28, 2009 at 9:21 AM, Jack Widman jack.wid...@gmail.com wrote: I'm able to get the page with wget, no problem. My application is making many hits to other sites. Maybe that has something to do with it. Also I am using Jetty in embedded mode. Is there a difference in performance and throughput with Jetty embedded vs non embedded? No. Jetty is just a bunch of stuff running on the JVM. If you're making HTTP requests on external systems, I'd recommend using the Apache Commons HTTP library or some abstraction on top of it (I think N8hanhttp://technically.us/codehas some code that does this). On Fri, Aug 28, 2009 at 12:20 AM, Ross Mellgren dri...@gmail.com wrote: That error sounds like it's probably that the remote server is disconnecting prematurely, or is not handling Transfer-Encoding: Chunked as HttpURLConnection expects. Have you tried getting whatever URL it's trying with wget or curl? -Ross On Aug 27, 2009, at 7:28 PM, Jack Widman wrote: Here is the code I am using. The exception is happening at line 12, the line that goes line = br.readLine() The exception is happening alot. Any ideas? package com.authoritude.snippet import java.io.{InputStreamReader, BufferedInputStream, BufferedReader, OutputStreamWriter, InputStream} object StreamUtil { def streamToString(stream: InputStream): String = { val buf = new StringBuilder val br = new BufferedReader(new InputStreamReader(stream)) var line: String = null var eof = false while (! eof) { line = br.readLine() if (line == null) eof = true else buf.append(line).append(\n) } buf.toString } } On Thu, Aug 27, 2009 at 5:49 PM, David Pollak feeder.of.the.be...@gmail.com wrote: This happens sometimes when the client disconnects before the communications with the server is complete. I see them from time to time and they indicate to me that the Internet is a random place. On Thu, Aug 27, 2009 at 12:06 PM, jack jack.wid...@gmail.com wrote: Has anyone seen this error? I get it while transforming a Stream into a String. The stream is from an http request I just made. Message: java.io.IOException: Premature EOF sun.net.www.http.ChunkedInputStream.readAheadBlocking (ChunkedInputStream.java:556) sun.net.www.http.ChunkedInputStream.readAhead (ChunkedInputStream.java: 600) sun.net.www.http.ChunkedInputStream.read (ChunkedInputStream.java:687) java.io.FilterInputStream.read(FilterInputStream.java:133) sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read (HttpURLConnection.java:2419) sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:282) sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:324) sun.nio.cs.StreamDecoder.read(StreamDecoder.java:176) java.io.InputStreamReader.read(InputStreamReader.java:184) java.io.BufferedReader.fill(BufferedReader.java:153) java.io.BufferedReader.readLine(BufferedReader.java:316) java.io.BufferedReader.readLine(BufferedReader.java:379) com.abc.snippet.StreamUtil$.streamToString(StreamUtil.scala:12) -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Git some: http://github.com/dpp -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Git some: http://github.com/dpp --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to liftweb@googlegroups.com To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/liftweb?hl=en -~--~~~~--~~--~--~---
[Lift] Re: Creating your own tags?
Hey David, Id like to echo your thoughts - I see no issue with views being tied to plugins or other such arbitrary tags... as you say, they are already tied to snippets. What are your thoughts on how arbitrary tag / prefix support could be implemented? Cheers, Tim There's been some discussion of this feature in the past. The generally outcome is that cost of prefix/label soup would become very confusing because the views become tied to plugins (although this seems weird to me because views are tied to snippets.) I think in light of the modularization discussion and the potential for snippet name overlap, it might be having the discussion about supporting arbitrary tags and arbitrary attributes in Lift's templating system. Anybody have thoughts? --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to liftweb@googlegroups.com To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/liftweb?hl=en -~--~~~~--~~--~--~---
[Lift] Re: Modularization of Lift code
On Jul 29, 12:55 pm, Heiko Seeberger heiko.seeber...@googlemail.com wrote: Just a quick and dirty reply: In order to get OSGi support LiftRules should delegate *everything* to a Collection of LiftModules. LiftModules can be added to and removed from this collection anytime. Yup, maintaining a collection is the easiest way to use dynamic updates in the future. That said, I've been discussing modularity of scala code generally recently: http://alblue.blogspot.com/2009/08/modularity-for-scala.html If anyone's interested helping out then please drop me a note on my blog. Hopefully we'll be able to extend the work that Heiko has already done and use that to modularise the core library. If successful, this could be used as an approach for both the lift code and apps that depend on lift. Alex --~--~-~--~~~---~--~~ 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: syntax question
Like this? def resultTable: NodeSeq = { table border=1 {for (r - 0 until analysis.slots.length) { tr {for (c - 0 until test.testvars.length) { new CellType(calls(r)(c).output) }} /tr }} /table } that is not working for me either, it still returns an empty table... can you by any chance demonstrate by editing this table? table tr for (c - 0 until 10) { td {array(c)} /td } /tr /table thanks, David On Aug 28, 3:49 pm, Naftoli Gugenheim naftoli...@gmail.com wrote: You can nest curly braces - just surround the for loop with another pair. - DavidVdavid.v.villa...@gmail.com wrote: This may be more of an HTML question, but since I haven't found an answer online, I'm working in Lift and I'm sure most people here can answer this easily I figured I'd ask. I am trying to create a dynamic HTML table, by looping through the rows and columns of the table and inserting variables from a two- dimensional array. my array is calls and is an Array[Array[Result]] The basic structure of the table that I want to create is: def resultTable: NodeSeq = { table border=1 for (r - 0 until analysis.slots.length) { tr for (c - 0 until test.testvars.length) { new CellType(calls(r)(c).output) } /tr } /table } I have a class CellType that returns a td variable content /td The resultTable method is in a snippet class and I am calling it from a separate HTML file. All other mechanisms are working well since I tested a simple trtdTEST/td/tr within the same method and it created the table as expected. Therefore, this is simply a syntax error. I know you have to use {} to isolate scala code/variables in HTML, but I'm not sure how to do that when the brackets are necessary for the loop. Thanks for the help, David --~--~-~--~~~---~--~~ 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: Modularization of Lift code
David, I'll take a look at the ESME code to see if what you've done scratches my itch on this issue. I've run the war file and it looks interesting. I assume the source is also available. Thanks for the heads-up. Glenn... On Aug 27, 7:55 pm, David Pollak feeder.of.the.be...@gmail.com wrote: On Thu, Aug 27, 2009 at 2:00 PM, glenn gl...@exmbly.com wrote: David, Besides the very detailed discussion here about the problems of Boot initialization and the immutability of sitemap and liftrules, that strikes me as a sufficient barrier to real modularization. Are you talking about modularization of web apps? Are you talking about being able to plop in a JAR file and do one or two bits of configuration and have that JAR's features be part of your app? If you are, with the exception of the where do my menu items go issue, as long as you can do the configuration in Boot, Lift allows for fully modular apps. Rather than complaining the Lift doesn't offer what you need, please define what you need in very specific terms (I need to intercept a GET request to a URL, I need to intercept requests to a URL if certain conditions are met, I need to include a tag in view code that invokes code in my module, etc.) or point to another framework that allows for this plugin modularization. I hadn't thought about turning reuseable code into traits and assigning those around in jar files until you mentioned it. Not a bad idea. But I wouldn't feel comfortable incorporating third-party traits in my code unless I had the source to fall back on. Why are traits any different than objects that you subclass? As far as I can tell, traits simply give you nearly multiple inheritance without the headaches. Why would you be any less willing to mix in a trait than to subclass a class provided by another library? Example of poor encapsulation - just the fact that you can encapsulate snippets and templates. Without the source, how can a user ever hope to incorporate those. I think that snippets are a near perfect encapsulation mechanism. They are simply a transformation of XHTML - XHTML. What could be more straight forward? What could be more encapsulated? Further, Lift's mechanism of associating HTML elements with functions means that there's no need to have special URLs to handle forms or anything else. My snippet can generate a form that will be processed if it is submitted back to the server, no matter what URL the form is submitted to. In Rails and other MVC frameworks, the POST/GET must be done to a specific controller in order for the parameters to be correctly processed. Why does this matter? Well, in the ESME codebase, I just created an authentication plugin mechanism that allows a plugin to define a part of a form that is to be filled in as part of the signup process. The signup process doesn't know anything about the plugin or what fields the plugin needs. The snippet that handles the signup simply binds one element to the plugins part of the sign-up. The plugin manages its own portion of the form, manages its own validation, manages its own saving, all without having to register as being part of the controller. This is highly modular. And then, to make them private, which is done...that's turning a headache into a nightmare. Can you give me an example of a private snippet or a private template and how you would use one? Yeah, as long as you work at the source-level, there is no problem. But that, in-and-of itself, is the problem. As you suggest, some, as yet unilluminated patterns, would be most helpful. If I understood what you were trying to do, I could help you with patterns. Code works best for me. If you could put together templates and stubbed Scala and make clear what you're trying to do and what Lift is not letting you do, I could help you out. Thanks, David Glenn... On Aug 27, 12:11 pm, David Pollak feeder.of.the.be...@gmail.com wrote: On Thu, Aug 27, 2009 at 11:22 AM, glenn gl...@exmbly.com wrote: David, Returning menu items from your init function is OK, but forces the user of your module to guess on function-call order I don't understand... what function call order are you talking about? The order in which the modules are initialized? Something else? , or be forced to glean it from the source, which he should not be required to do. Putting code such as this, instead, in your init function helps, but does not eliminate that problem. What particular problem? val sitemap = LiftRules.siteMap match { case Full(sm) = LiftRules.setSiteMap(SiteMap(sm.menus ::: Role.menus:_* )) case _ = LiftRules.setSiteMap(SiteMap(Role.menus:_*)) } Where are you proposing to put this code? With it, you can sort of standardize your call-order, requiring that the init function be called immediately before
[Lift] Re: Creating your own tags?
Hey Marius Firstly I agree with your thoughts on LiftTagPF - im not sure that overriding the default lift tags would ever be a good idea for implementing users... However, I do see a use case, in, for instance the CMS arena where having a specialized tagging mechanism would be beneficial because you simply wouldn't want to use the default lift namespace so that users could just do: lift:comet type=Whatever / All over their template code - you'd want to restrict what users could actually do whilst still keeping the templates designer friendly. This is one use case, and in my particular circumstances, I want to provide a degree of functionality that is succinctly separate from the lift functionality and I don't want the twain to meet (as it were) but its important for my purposes at least that the templates still play well with tools such as Dreamweaver (just as the lift tags do) What are your thoughts? Cheers, Tim On Aug 28, 5:48 pm, marius d. marius.dan...@gmail.com wrote: Personally I'm not a fan of such feature. To me this doesn't bring much benefits especially that snippets pretty much allow this support such as: lift:MySnippet something:notlift attr=whatever / /lift:MySnippet ...yes the wrapping tag is extra typing but still I can't find a real problem where a custom tags solves it and snippets do now. To me this looks like ... what I'd call a false sense of extensibility. I mean at the first glance we allow people to define a tag soup (with or without naming overlaps) but then looking closely is that we didn't actually do too much. Snippets would do the job in a more standardize lift way IMO. For what I can tell the LiftRules.LiftTagPF should probably be deprecated. The debatable value that I could currently find in LiftTagPF is that people could overwrite Lift built in snippets with some proprietary implementation. However in practice this is not really needed .. I think. All in all I'd love to see some types of problems where custom tags would be a better fit. Br's, Marius On Aug 28, 7:30 pm, Timothy Perrett timo...@getintheloop.eu wrote: Hey David, Id like to echo your thoughts - I see no issue with views being tied to plugins or other such arbitrary tags... as you say, they are already tied to snippets. What are your thoughts on how arbitrary tag / prefix support could be implemented? Cheers, Tim There's been some discussion of this feature in the past. The generally outcome is that cost of prefix/label soup would become very confusing because the views become tied to plugins (although this seems weird to me because views are tied to snippets.) I think in light of the modularization discussion and the potential for snippet name overlap, it might be having the discussion about supporting arbitrary tags and arbitrary attributes in Lift's templating system. Anybody have thoughts? --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to liftweb@googlegroups.com To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/liftweb?hl=en -~--~~~~--~~--~--~---
[Lift] Re: syntax question
Sorry for the confusion. The way I initially represented the table, it did not compile. I got the following errors: in XML literal: '' expected instead of '0' in XML literal: '' expected instead of '0' in XML literal: expected closing tag of - in XML literal: expected closing tag of - on lines: 3, 5, 8 and 10, respectively. 1 def resultTable: NodeSeq = { 2 table border=1 3 for (r - 0 until analysis.slots.length) { 4 tr 5 for (c - 0 until test.testvars.length) { 6 new CellType(calls(r)(c).output) 7 } 8 /tr 9 } 10 /table 11 } I have tried a number of different ways to add the curly braces that makes it compile, including they way you suggested. However every time I succeed in making it compile with curly braces it returns an empty table. On Aug 28, 3:49 pm, Naftoli Gugenheim naftoli...@gmail.com wrote: You can nest curly braces - just surround the for loop with another pair. - DavidVdavid.v.villa...@gmail.com wrote: This may be more of an HTML question, but since I haven't found an answer online, I'm working in Lift and I'm sure most people here can answer this easily I figured I'd ask. I am trying to create a dynamic HTML table, by looping through the rows and columns of the table and inserting variables from a two- dimensional array. my array is calls and is an Array[Array[Result]] The basic structure of the table that I want to create is: def resultTable: NodeSeq = { table border=1 for (r - 0 until analysis.slots.length) { tr for (c - 0 until test.testvars.length) { new CellType(calls(r)(c).output) } /tr } /table } I have a class CellType that returns a td variable content /td The resultTable method is in a snippet class and I am calling it from a separate HTML file. All other mechanisms are working well since I tested a simple trtdTEST/td/tr within the same method and it created the table as expected. Therefore, this is simply a syntax error. I know you have to use {} to isolate scala code/variables in HTML, but I'm not sure how to do that when the brackets are necessary for the loop. Thanks for the help, David --~--~-~--~~~---~--~~ 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: syntax question
and yes, I verified that it has the necessary information to iterate by substituting the td values with a println On Aug 28, 4:15 pm, Naftoli Gugenheim naftoli...@gmail.com wrote: Before it was empty or not compiling? Can you verify that it has what to iterate? - DavidVdavid.v.villa...@gmail.com wrote: Like this? def resultTable: NodeSeq = { table border=1 {for (r - 0 until analysis.slots.length) { tr {for (c - 0 until test.testvars.length) { new CellType(calls(r)(c).output) }} /tr }} /table } that is not working for me either, it still returns an empty table... can you by any chance demonstrate by editing this table? table tr for (c - 0 until 10) { td {array(c)} /td } /tr /table thanks, David On Aug 28, 3:49 pm, Naftoli Gugenheim naftoli...@gmail.com wrote: You can nest curly braces - just surround the for loop with another pair. - DavidVdavid.v.villa...@gmail.com wrote: This may be more of an HTML question, but since I haven't found an answer online, I'm working in Lift and I'm sure most people here can answer this easily I figured I'd ask. I am trying to create a dynamic HTML table, by looping through the rows and columns of the table and inserting variables from a two- dimensional array. my array is calls and is an Array[Array[Result]] The basic structure of the table that I want to create is: def resultTable: NodeSeq = { table border=1 for (r - 0 until analysis.slots.length) { tr for (c - 0 until test.testvars.length) { new CellType(calls(r)(c).output) } /tr } /table } I have a class CellType that returns a td variable content /td The resultTable method is in a snippet class and I am calling it from a separate HTML file. All other mechanisms are working well since I tested a simple trtdTEST/td/tr within the same method and it created the table as expected. Therefore, this is simply a syntax error. I know you have to use {} to isolate scala code/variables in HTML, but I'm not sure how to do that when the brackets are necessary for the loop. Thanks for the help, David --~--~-~--~~~---~--~~ 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: Creating your own tags?
Personally I'm not a fan of such feature. To me this doesn't bring much benefits especially that snippets pretty much allow this support such as: lift:MySnippet something:notlift attr=whatever / /lift:MySnippet ...yes the wrapping tag is extra typing but still I can't find a real problem where a custom tags solves it and snippets do now. To me this looks like ... what I'd call a false sense of extensibility. I mean at the first glance we allow people to define a tag soup (with or without naming overlaps) but then looking closely is that we didn't actually do too much. Snippets would do the job in a more standardize lift way IMO. For what I can tell the LiftRules.LiftTagPF should probably be deprecated. The debatable value that I could currently find in LiftTagPF is that people could overwrite Lift built in snippets with some proprietary implementation. However in practice this is not really needed .. I think. All in all I'd love to see some types of problems where custom tags would be a better fit. Br's, Marius On Aug 28, 7:30 pm, Timothy Perrett timo...@getintheloop.eu wrote: Hey David, Id like to echo your thoughts - I see no issue with views being tied to plugins or other such arbitrary tags... as you say, they are already tied to snippets. What are your thoughts on how arbitrary tag / prefix support could be implemented? Cheers, Tim There's been some discussion of this feature in the past. The generally outcome is that cost of prefix/label soup would become very confusing because the views become tied to plugins (although this seems weird to me because views are tied to snippets.) I think in light of the modularization discussion and the potential for snippet name overlap, it might be having the discussion about supporting arbitrary tags and arbitrary attributes in Lift's templating system. Anybody have thoughts? --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to liftweb@googlegroups.com To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/liftweb?hl=en -~--~~~~--~~--~--~---
[Lift] Re: Creating your own tags?
On Aug 28, 11:20 pm, Timothy Perrett timo...@getintheloop.eu wrote: Hey Marius Firstly I agree with your thoughts on LiftTagPF - im not sure that overriding the default lift tags would ever be a good idea for implementing users... Well I was referring to overwriting (as those would take precedence over builtin snippets) ... not much of an overriding. However, I do see a use case, in, for instance the CMS arena where having a specialized tagging mechanism would be beneficial because you simply wouldn't want to use the default lift namespace so that users could just do: lift:comet type=Whatever / All over their template code - you'd want to restrict what users could actually do whilst still keeping the templates designer friendly. Such restrictions could be very tricky to achieve if the CMS template is processed by Lift engine. Perhaps for specialized CMS templates a dedicated templating definition and engine is more appropriate in order to strictly process given tags that define the CMS templating language? This is one use case, and in my particular circumstances, I want to provide a degree of functionality that is succinctly separate from the lift functionality and I don't want the twain to meet (as it were) but its important for my purposes at least that the templates still play well with tools such as Dreamweaver (just as the lift tags do) What are your thoughts? Related to my notes above if you define a set of tags for your CMS template and you run that against Lift's templating engine how do you prevent lift specific tags to be executed? Cheers, Tim On Aug 28, 5:48 pm, marius d. marius.dan...@gmail.com wrote: Personally I'm not a fan of such feature. To me this doesn't bring much benefits especially that snippets pretty much allow this support such as: lift:MySnippet something:notlift attr=whatever / /lift:MySnippet ...yes the wrapping tag is extra typing but still I can't find a real problem where a custom tags solves it and snippets do now. To me this looks like ... what I'd call a false sense of extensibility. I mean at the first glance we allow people to define a tag soup (with or without naming overlaps) but then looking closely is that we didn't actually do too much. Snippets would do the job in a more standardize lift way IMO. For what I can tell the LiftRules.LiftTagPF should probably be deprecated. The debatable value that I could currently find in LiftTagPF is that people could overwrite Lift built in snippets with some proprietary implementation. However in practice this is not really needed .. I think. All in all I'd love to see some types of problems where custom tags would be a better fit. Br's, Marius On Aug 28, 7:30 pm, Timothy Perrett timo...@getintheloop.eu wrote: Hey David, Id like to echo your thoughts - I see no issue with views being tied to plugins or other such arbitrary tags... as you say, they are already tied to snippets. What are your thoughts on how arbitrary tag / prefix support could be implemented? Cheers, Tim There's been some discussion of this feature in the past. The generally outcome is that cost of prefix/label soup would become very confusing because the views become tied to plugins (although this seems weird to me because views are tied to snippets.) I think in light of the modularization discussion and the potential for snippet name overlap, it might be having the discussion about supporting arbitrary tags and arbitrary attributes in Lift's templating system. Anybody have thoughts? --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to liftweb@googlegroups.com To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/liftweb?hl=en -~--~~~~--~~--~--~---
[Lift] Re: syntax question
table { for(i - 0 until 10) yield tr { for(j - 0 until 10) yield td{j}/td } /tr } /table My guess is that you've omitted your yields On Fri, Aug 28, 2009 at 10:34 PM, DavidV david.v.villa...@gmail.com wrote: and yes, I verified that it has the necessary information to iterate by substituting the td values with a println On Aug 28, 4:15 pm, Naftoli Gugenheim naftoli...@gmail.com wrote: Before it was empty or not compiling? Can you verify that it has what to iterate? - DavidVdavid.v.villa...@gmail.com wrote: Like this? def resultTable: NodeSeq = { table border=1 {for (r - 0 until analysis.slots.length) { tr {for (c - 0 until test.testvars.length) { new CellType(calls(r)(c).output) }} /tr }} /table } that is not working for me either, it still returns an empty table... can you by any chance demonstrate by editing this table? table tr for (c - 0 until 10) { td {array(c)} /td } /tr /table thanks, David On Aug 28, 3:49 pm, Naftoli Gugenheim naftoli...@gmail.com wrote: You can nest curly braces - just surround the for loop with another pair. - DavidVdavid.v.villa...@gmail.com wrote: This may be more of an HTML question, but since I haven't found an answer online, I'm working in Lift and I'm sure most people here can answer this easily I figured I'd ask. I am trying to create a dynamic HTML table, by looping through the rows and columns of the table and inserting variables from a two- dimensional array. my array is calls and is an Array[Array[Result]] The basic structure of the table that I want to create is: def resultTable: NodeSeq = { table border=1 for (r - 0 until analysis.slots.length) { tr for (c - 0 until test.testvars.length) { new CellType(calls(r)(c).output) } /tr } /table } I have a class CellType that returns a td variable content /td The resultTable method is in a snippet class and I am calling it from a separate HTML file. All other mechanisms are working well since I tested a simple trtdTEST/td/tr within the same method and it created the table as expected. Therefore, this is simply a syntax error. I know you have to use {} to isolate scala code/variables in HTML, but I'm not sure how to do that when the brackets are necessary for the loop. Thanks for the help, David -- 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] Searching this Group
Search this group doesn't always work. I found this by searching for the term fade, recalling a discussion Marius posted about fading out messages. Search this group does not find the discussion, but you can find the discussion by changing the search criteria to fade group:liftweb and use the Search Groups button. Here's a very short screencast (28sec) showing the problem and solution: http://www.utipu.com/app/tip/id/15703/ I hope this helps somebody else find what they are looking for. Maybe it's why there are so many duplicate questions posted. --~--~-~--~~~---~--~~ 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: error in http authetication and openid
i will explore more in this area . Thanks for replies On Aug 28, 4:33 am, David Pollak feeder.of.the.be...@gmail.com wrote: I think you'll be best off protecting your resource with basic auth to determine who the user is but using sitemap (for HTML pages) and guards in partial functions (for web services) to enforce URL-level RBAC. On Fri, Aug 28, 2009 at 2:44 AM, Timothy Perrett timo...@getintheloop.euwrote: It should not matter if its append or prepend (relatively speaking) as its a RuleSeq[T] OOTB, the HTTP Auth stuff has nothing to do with ProtoUser... you could probably knit them together, but that is not what it is designed to do from the starting blocks... Cheers, Tim On Aug 28, 8:09 am, iboy iboy1...@gmail.com wrote: Thanks Timothy That helped me out a lot but i have one doubt that as per given in liftbook code i used LiftRules. httpAuthProtectedResource.append but new code used prepend and secondly how can we apply the role based access to the user model so that when signing in we can implicitly know that this user has admin rights. Best On Aug 27, 3:47 pm, Timothy Perrett timo...@getintheloop.eu wrote: Please check: http://is.gd/2BwGf Can you check your code looks like that and if your still getting the problem? Cheers, Tim On 27/08/2009 11:34, iboy iboy1...@gmail.com wrote: Hi all i am new to scala and lift. while trying to do a sample project i tried to use httpauthentication code given in liftbook (7.14 authentication example) and i am getting following errors a) while using import auth._ error: value auth not found if i try using _root_.net.liftweb.http.auth._ i get error: value auth is not a member of package net.liftweb.http import _root_.net.liftweb.http.auth._ any help is appreciated i am using scala 2.7.3 final and maven 2.0.9 -- Lift, the simply functional web frameworkhttp://liftweb.net Beginning Scalahttp://www.apress.com/book/view/1430219890 Follow me:http://twitter.com/dpp Git some:http://github.com/dpp --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to liftweb@googlegroups.com To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/liftweb?hl=en -~--~~~~--~~--~--~---
[Lift] Re: syntax question
Are you positive the list is not empty? And is it empty of tr's or just td's? - DavidVdavid.v.villa...@gmail.com wrote: Sorry for the confusion. The way I initially represented the table, it did not compile. I got the following errors: in XML literal: '' expected instead of '0' in XML literal: '' expected instead of '0' in XML literal: expected closing tag of - in XML literal: expected closing tag of - on lines: 3, 5, 8 and 10, respectively. 1 def resultTable: NodeSeq = { 2 table border=1 3 for (r - 0 until analysis.slots.length) { 4 tr 5 for (c - 0 until test.testvars.length) { 6 new CellType(calls(r)(c).output) 7 } 8 /tr 9 } 10 /table 11 } I have tried a number of different ways to add the curly braces that makes it compile, including they way you suggested. However every time I succeed in making it compile with curly braces it returns an empty table. On Aug 28, 3:49 pm, Naftoli Gugenheim naftoli...@gmail.com wrote: You can nest curly braces - just surround the for loop with another pair. - DavidVdavid.v.villa...@gmail.com wrote: This may be more of an HTML question, but since I haven't found an answer online, I'm working in Lift and I'm sure most people here can answer this easily I figured I'd ask. I am trying to create a dynamic HTML table, by looping through the rows and columns of the table and inserting variables from a two- dimensional array. my array is calls and is an Array[Array[Result]] The basic structure of the table that I want to create is: def resultTable: NodeSeq = { table border=1 for (r - 0 until analysis.slots.length) { tr for (c - 0 until test.testvars.length) { new CellType(calls(r)(c).output) } /tr } /table } I have a class CellType that returns a td variable content /td The resultTable method is in a snippet class and I am calling it from a separate HTML file. All other mechanisms are working well since I tested a simple trtdTEST/td/tr within the same method and it created the table as expected. Therefore, this is simply a syntax error. I know you have to use {} to isolate scala code/variables in HTML, but I'm not sure how to do that when the brackets are necessary for the loop. Thanks for the help, David --~--~-~--~~~---~--~~ 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: Creating your own tags?
Its not that I want to completely stop the normal lift tag processing, I don't, I just want to make it appear to users as if they are not using lift... That might sound crazy, but essentially I want users to only know about that tags they are told about, rather than having obvious access to all the lift default stuff. Yes, ok, they could do some research and dig it out, but in my experience if it is not staring users in the face, only a few of them will go looking any deeper. Does that make any sense what-so-ever? Cheers, Tim On 28/08/2009 21:47, marius d. marius.dan...@gmail.com wrote: Hey Marius Firstly I agree with your thoughts on LiftTagPF - im not sure that overriding the default lift tags would ever be a good idea for implementing users... Well I was referring to overwriting (as those would take precedence over builtin snippets) ... not much of an overriding. However, I do see a use case, in, for instance the CMS arena where having a specialized tagging mechanism would be beneficial because you simply wouldn't want to use the default lift namespace so that users could just do: lift:comet type=Whatever / All over their template code - you'd want to restrict what users could actually do whilst still keeping the templates designer friendly. Such restrictions could be very tricky to achieve if the CMS template is processed by Lift engine. Perhaps for specialized CMS templates a dedicated templating definition and engine is more appropriate in order to strictly process given tags that define the CMS templating language? This is one use case, and in my particular circumstances, I want to provide a degree of functionality that is succinctly separate from the lift functionality and I don't want the twain to meet (as it were) but its important for my purposes at least that the templates still play well with tools such as Dreamweaver (just as the lift tags do) What are your thoughts? Related to my notes above if you define a set of tags for your CMS template and you run that against Lift's templating engine how do you prevent lift specific tags to be executed? --~--~-~--~~~---~--~~ 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: syntax question
You can nest curly braces - just surround the for loop with another pair. - DavidVdavid.v.villa...@gmail.com wrote: This may be more of an HTML question, but since I haven't found an answer online, I'm working in Lift and I'm sure most people here can answer this easily I figured I'd ask. I am trying to create a dynamic HTML table, by looping through the rows and columns of the table and inserting variables from a two- dimensional array. my array is calls and is an Array[Array[Result]] The basic structure of the table that I want to create is: def resultTable: NodeSeq = { table border=1 for (r - 0 until analysis.slots.length) { tr for (c - 0 until test.testvars.length) { new CellType(calls(r)(c).output) } /tr } /table } I have a class CellType that returns a td variable content /td The resultTable method is in a snippet class and I am calling it from a separate HTML file. All other mechanisms are working well since I tested a simple trtdTEST/td/tr within the same method and it created the table as expected. Therefore, this is simply a syntax error. I know you have to use {} to isolate scala code/variables in HTML, but I'm not sure how to do that when the brackets are necessary for the loop. Thanks for the help, David --~--~-~--~~~---~--~~ 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: syntax question
Aha! I knew it was something simple. Thanks! On Aug 28, 4:57 pm, Viktor Klang viktor.kl...@gmail.com wrote: table { for(i - 0 until 10) yield tr { for(j - 0 until 10) yield td{j}/td } /tr } /table My guess is that you've omitted your yields On Fri, Aug 28, 2009 at 10:34 PM, DavidV david.v.villa...@gmail.com wrote: and yes, I verified that it has the necessary information to iterate by substituting the td values with a println On Aug 28, 4:15 pm, Naftoli Gugenheim naftoli...@gmail.com wrote: Before it was empty or not compiling? Can you verify that it has what to iterate? - DavidVdavid.v.villa...@gmail.com wrote: Like this? def resultTable: NodeSeq = { table border=1 {for (r - 0 until analysis.slots.length) { tr {for (c - 0 until test.testvars.length) { new CellType(calls(r)(c).output) }} /tr }} /table } that is not working for me either, it still returns an empty table... can you by any chance demonstrate by editing this table? table tr for (c - 0 until 10) { td {array(c)} /td } /tr /table thanks, David On Aug 28, 3:49 pm, Naftoli Gugenheim naftoli...@gmail.com wrote: You can nest curly braces - just surround the for loop with another pair. - DavidVdavid.v.villa...@gmail.com wrote: This may be more of an HTML question, but since I haven't found an answer online, I'm working in Lift and I'm sure most people here can answer this easily I figured I'd ask. I am trying to create a dynamic HTML table, by looping through the rows and columns of the table and inserting variables from a two- dimensional array. my array is calls and is an Array[Array[Result]] The basic structure of the table that I want to create is: def resultTable: NodeSeq = { table border=1 for (r - 0 until analysis.slots.length) { tr for (c - 0 until test.testvars.length) { new CellType(calls(r)(c).output) } /tr } /table } I have a class CellType that returns a td variable content /td The resultTable method is in a snippet class and I am calling it from a separate HTML file. All other mechanisms are working well since I tested a simple trtdTEST/td/tr within the same method and it created the table as expected. Therefore, this is simply a syntax error. I know you have to use {} to isolate scala code/variables in HTML, but I'm not sure how to do that when the brackets are necessary for the loop. Thanks for the help, David -- 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: syntax question
Before it was empty or not compiling? Can you verify that it has what to iterate? - DavidVdavid.v.villa...@gmail.com wrote: Like this? def resultTable: NodeSeq = { table border=1 {for (r - 0 until analysis.slots.length) { tr {for (c - 0 until test.testvars.length) { new CellType(calls(r)(c).output) }} /tr }} /table } that is not working for me either, it still returns an empty table... can you by any chance demonstrate by editing this table? table tr for (c - 0 until 10) { td {array(c)} /td } /tr /table thanks, David On Aug 28, 3:49 pm, Naftoli Gugenheim naftoli...@gmail.com wrote: You can nest curly braces - just surround the for loop with another pair. - DavidVdavid.v.villa...@gmail.com wrote: This may be more of an HTML question, but since I haven't found an answer online, I'm working in Lift and I'm sure most people here can answer this easily I figured I'd ask. I am trying to create a dynamic HTML table, by looping through the rows and columns of the table and inserting variables from a two- dimensional array. my array is calls and is an Array[Array[Result]] The basic structure of the table that I want to create is: def resultTable: NodeSeq = { table border=1 for (r - 0 until analysis.slots.length) { tr for (c - 0 until test.testvars.length) { new CellType(calls(r)(c).output) } /tr } /table } I have a class CellType that returns a td variable content /td The resultTable method is in a snippet class and I am calling it from a separate HTML file. All other mechanisms are working well since I tested a simple trtdTEST/td/tr within the same method and it created the table as expected. Therefore, this is simply a syntax error. I know you have to use {} to isolate scala code/variables in HTML, but I'm not sure how to do that when the brackets are necessary for the loop. Thanks for the help, David --~--~-~--~~~---~--~~ 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: syntax question
--~--~-~--~~~---~--~~ 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] Proposed improvement to CRUDify
Hi, I think the _showAllTemplate should wrap the header and footer rows in thead and tfoot blocks respectively so that the table plays nice with the TableSorter widget. - Jon --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to liftweb@googlegroups.com To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/liftweb?hl=en -~--~~~~--~~--~--~---
[Lift] Re: Creating your own tags?
Security by obscurity, eh? Timothy Perrett wrote: Its not that I want to completely stop the normal lift tag processing, I don't, I just want to make it appear to users as if they are not using lift... That might sound crazy, but essentially I want users to only know about that tags they are told about, rather than having obvious access to all the lift default stuff. Yes, ok, they could do some research and dig it out, but in my experience if it is not staring users in the face, only a few of them will go looking any deeper. Does that make any sense what-so-ever? Cheers, Tim On 28/08/2009 21:47, marius d. marius.dan...@gmail.com wrote: Hey Marius Firstly I agree with your thoughts on LiftTagPF - im not sure that overriding the default lift tags would ever be a good idea for implementing users... Well I was referring to overwriting (as those would take precedence over builtin snippets) ... not much of an overriding. However, I do see a use case, in, for instance the CMS arena where having a specialized tagging mechanism would be beneficial because you simply wouldn't want to use the default lift namespace so that users could just do: lift:comet type=Whatever / All over their template code - you'd want to restrict what users could actually do whilst still keeping the templates designer friendly. Such restrictions could be very tricky to achieve if the CMS template is processed by Lift engine. Perhaps for specialized CMS templates a dedicated templating definition and engine is more appropriate in order to strictly process given tags that define the CMS templating language? This is one use case, and in my particular circumstances, I want to provide a degree of functionality that is succinctly separate from the lift functionality and I don't want the twain to meet (as it were) but its important for my purposes at least that the templates still play well with tools such as Dreamweaver (just as the lift tags do) What are your thoughts? Related to my notes above if you define a set of tags for your CMS template and you run that against Lift's templating engine how do you prevent lift specific tags to be executed? --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to liftweb@googlegroups.com To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/liftweb?hl=en -~--~~~~--~~--~--~---
[Lift] Re: how to ajaxInvoke on page load?
On Wed, Aug 26, 2009 at 2:34 PM, harryh har...@gmail.com wrote: Answering my own question: val (name, exp) = ajaxInvoke(() = { SetHtml(id, xhtml) }) {Script(OnLoad(exp.cmd))} AFAIK I can just ignore name? For now. The name is part of the Lift GC mechanism. At this time (due to a bad interaction between Firefox and jQuery), Lift's GC is page-level rather than being component level. If/when we move to a component level GC, it will be important to keep track of the name of the ajax function so it doesn't get GC'ed. -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 Git some: http://github.com/dpp --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to liftweb@googlegroups.com To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/liftweb?hl=en -~--~~~~--~~--~--~---
[Lift] Maven dependency problem with smack jar
Hi. I downloaded PocketChange Application referenced in the pdf file below. http://build.schuerrer.org/liftbook/master.pdf But maven say - Missing artifact org.igniterealtime.smack:smack:jar:3.1.0:compile - Missing artifact org.igniterealtime.smack:smackx:jar:3.1.0:compile Which repository has smack-3.1.0.jar and smackx-3.1.0.jar? Should I install these jars manually? Thanks in advance. --~--~-~--~~~---~--~~ 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] model existing postgresql database
We have an existing PostgreSQL database with many tables, views, indexes that we'd like to model in Lift. I created a basic model but it seems to insist on creating an index that isn't needed. Below is the error followed by the model code. Note that 'person' is a view in our database, not a table. INFO - CREATE INDEX person_person_id ON person ( person_id ) ERROR - Failed to Boot org.postgresql.util.PSQLException: ERROR: person is not a table package raclift.model import net.liftweb.mapper._ import net.liftweb.util._ object PersonMetaData extends Person with KeyedMetaMapper[Long, Person] { override def dbTableName = person override def fieldOrder = List(person_id, first_name, last_name, password) } class Person extends KeyedMapper[Long, Person] { def getSingleton = PersonMetaData def primaryKeyField = person_id object person_id extends MappedLongIndex(this) object first_name extends MappedString(this, 100) object last_name extends MappedString(this, 100) object password extends MappedText(this) def emails = EmailMetaData.findAll(By(EmailMetaData.invisible_id, person_id)) } --~--~-~--~~~---~--~~ 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: syntax question
I think you need the yield keyword, otherwise the for-loop is acting as foreach, not map: def resultTable(tab: Array[Array[Int]]): NodeSeq = table border=1{ for (r - 0 until tab.length) yield { tr{ for (c - 0 until tab(r).length) yield { td{ tab(r)(c).toString }/td } }/tr } }/table (I had to squish it on to one line to make scala REPL take it, here's the version I used with the REPL:) scala val tab = Array.fromFunction((a,b) = a*b)(10,10) tab: Array[Array[Int]] = Array(Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0), Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9), Array(0, 2, 4, 6, 8, 10, 12, 14, 16, 18), Array(0, 3, 6, 9, 12, 15, 18, 21, 24, 27), Array(0, 4, 8, 12, 16, 20, 24, 28, 32, 36), Array(0, 5, 10, 15, 20, 25, 30, 35, 40, 45), Array(0, 6, 12, 18, 24, 30, 36, 42, 48, 54), Array(0, 7, 14, 21, 28, 35, 42, 49, 56, 63), Array(0, 8, 16, 24... scala def resultTable(tab: Array[Array[Int]]): NodeSeq = |table border=1{ for (r - 0 until tab.length) yield { tr{ for (c - 0 until tab(r).length) yield { td{ tab(r) (c).toString }/td } }/tr } }/table resultTable: (Array[Array[Int]])scala.xml.NodeSeq scala resultTable(tab) res6: scala.xml.NodeSeq = table border=1trtd0/tdtd0/ tdtd0/tdtd0/tdtd0/tdtd0/tdtd0/tdtd0/tdtd0/ tdtd0/td/trtrtd0/tdtd1/tdtd2/tdtd3/tdtd4/ tdtd5/tdtd6/tdtd7/tdtd8/tdtd9/td/trtrtd0/ tdtd2/tdtd4/tdtd6/tdtd8/tdtd10/tdtd12/ tdtd14/tdtd16/tdtd18/td/trtrtd0/... -Ross On Aug 28, 2009, at 3:59 PM, DavidV wrote: def resultTable: NodeSeq = { table border=1 {for (r - 0 until analysis.slots.length) { tr {for (c - 0 until test.testvars.length) { new CellType(calls(r)(c).output) }} /tr }} /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] Maven dependency problem with smack jar
Sorry, It's just my environment problem... Please Ignore this and before post. --~--~-~--~~~---~--~~ 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] why match not exhaustive?
I am getting this warning during compile of my ToDo tutorial app enhancement: ToDo.scala:355: warning: match is not exhaustive! missing combination ParamFailure missing combination Failure case Nil = selectedTag match { My code is: currentTask.validate match { case Nil = selectedTag match { case Full(currentTag) = if (! currentTask.saved_?) { currentTask.save JoinTags.joinTask(currentTag, currentTask) S.notice(added Task: + currentTask.desc.is) } case Empty = S.error(..please supply a Tag); S.mapSnippet(ToDo.addTask, doTaskBind) } case xs = S.error(xs); S.mapSnippet(ToDo.addTask, doTaskBind) } The code runs fine so far... Is it the nested match? --~--~-~--~~~---~--~~ 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 match not exhaustive?
scalac is checking that you have a case for each possible pattern for the given value, which it can determine because Box and its subclasses are sealed. In this case, you explicitly handle Full and Empty, but do not consider Failure or its subclass ParamFailure, which will cause a MatchError at runtime if selectedTag is one of those. Add a case for Failure, or change your case Empty = to case _ = and the warning will probably go away. -Ross On Aug 28, 2009, at 11:51 PM, g-man wrote: I am getting this warning during compile of my ToDo tutorial app enhancement: ToDo.scala:355: warning: match is not exhaustive! missing combination ParamFailure missing combination Failure case Nil = selectedTag match { My code is: currentTask.validate match { case Nil = selectedTag match { case Full(currentTag) = if (! currentTask.saved_?) { currentTask.save JoinTags.joinTask(currentTag, currentTask) S.notice(added Task: + currentTask.desc.is) } case Empty = S.error(..please supply a Tag); S.mapSnippet(ToDo.addTask, doTaskBind) } case xs = S.error(xs); S.mapSnippet(ToDo.addTask, doTaskBind) } The code runs fine so far... Is it the nested match? --~--~-~--~~~---~--~~ 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] MappedStringIndex Odd Behaviour/Problems
Hi, I've been attempting to use MappedStringIndex in my data model which is being backed by a Derby database. I'm having two issues with it though. It does not make the column NOT NULL, so when the mapper attempts to add the index, it complains with errors like: 'TOKEN' cannot be a column of a primary key or unique key because it can contain null values. It also sets itself as being a primary key, which I find to be rather odd default, which also results in SQL errors if another primary key is defined if the first problem is resolved. Currently, I've subclassed MappedStringIndex to fix these problems for me (below). Is there a more appropriate way to solve my problems or are these issues with Lift? class ProperMappedStringIndex[T:Mapper[T]](override val fieldOwner: T, override val maxLen: Int) extends MappedStringIndex[T](fieldOwner, maxLen) { override def dbPrimaryKey_? = false override def fieldCreatorString(dbType: DriverType, colName: String): String = super.fieldCreatorString(dbType, colName) + NOT NULL } --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---