[Lift] Re: How to use prepareStatement to select *** from DB (two db vender)?
I have added the demo code on the Github now. ( Mabye it's a bug with DB.runQuery and DB.use in the two db vender ) Here is the address: http://github.com/anim510/two_db_demo Thanks very much! Cheers, Neil On Jan 21, 11:26 am, Neil.Lv anim...@gmail.com wrote: My email is : anim...@gmail.com On Jan 21, 11:17 am, Neil.Lv anim...@gmail.com wrote: Mabye it's a bug with DB.runQuery and DB.use in the two db vender Two question: (problem) 1: I don't know why the HelloWorld snippet code will be execute 2 times in this code. (See the HelloWorld.scala file.) 2: The dbDefaultConnectionIdentifier method in the Model that it works fine when using Mapper's method such as ModelName.findAll(), it doesn't work when using DB.runQuery and DB.use(...) --- (Maybe it can't find the default db identifier) The question 2 I test it many times that found this problem. In the test app , the Hot.getHots2 and Hot.getHots3 method can't work. I comment the code now in the HelloWorld.scala file, you can try it. I can push the code on the github, and get this errors fatal: unable to fork So If anyone know what's wrong with it and I can send the demo.tar file through the email. Thanks very much! Cheers, Neil On Jan 21, 1:56 am, Neil.Lv anim...@gmail.com wrote: The DB.runQuery can works now, but the DB.prepareStatement also cant' work. Here is the test app address: http://github.com/anim510/two_db_demo Cheers, Neil On Jan 21, 1:16 am, Neil.Lv anim...@gmail.com wrote: Thank you very much, But it doesn't work yet, maybe because of using two db connections. I'll test it later again. On Jan 21, 12:44 am, Jeppe Nejsum Madsen je...@ingolfs.dk wrote: Neil.Lv anim...@gmail.com writes: Hi all, I use two db connections in my app, and I want to use DB.prepareStatement to select the records from the second db. It failed, Here is the code: ### def getHotByTid(id : Long) = DB.use(bootstrap.liftweb.TwoDB) { conn = DB.prepareStatement(SELECT * FROM hots WHERE id=? , conn) { stmt = stmt.setLong(1, id) Log.info(stmt : + stmt) // The information is correctly now, but after call executeUpdate method stmt.executeUpdate() } } Not sure what your problem is really, but I think you should use DB.runQuery to execute a select statement Ie val (_,result) = DB.runQuery(SELECT COUNT(*), contract_length FROM + vehicles_current v + WHERE v.account_id=? + GROUP BY contract_length + ORDER BY contract_length, List(42)) /Jeppe -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
[Lift] Re: What happens between 7000 and 8000 requests?
First of all thanks for the replies. Your comments made a lot of sense, so I tested again using a cookie jsessionid and voilà no problems anymore even running more than 100,000 requests in a row now. Also the failed requests are gone. Thanks again. Stefan Koenig On Jan 21, 5:16 am, Derek Williams de...@nebvin.ca wrote: Okay, I tried it out. jsessionid is sometimes 12 or 13 characters long which is why the document length is changing. Those failures due to length are probably safe to ignore. On Wed, Jan 20, 2010 at 6:00 PM, Derek Williams de...@nebvin.ca wrote: I could be wrong here, but I think the failed requests might be due to the jsessionid that jetty adds onto the links, they may be different sizes. I am away from my computer right now and can't test it though. -- Derek Williams -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
Re: [Lift] Re: What happens between 7000 and 8000 requests?
On Thu, Jan 21, 2010 at 6:25 AM, Stefan Koenig koeni...@gmail.com wrote: First of all thanks for the replies. Your comments made a lot of sense, so I tested again using a cookie jsessionid and voilà no problems anymore even running more than 100,000 requests in a row now. Also the failed requests are gone. And is Lift still much faster? Thanks again. Stefan Koenig On Jan 21, 5:16 am, Derek Williams de...@nebvin.ca wrote: Okay, I tried it out. jsessionid is sometimes 12 or 13 characters long which is why the document length is changing. Those failures due to length are probably safe to ignore. On Wed, Jan 20, 2010 at 6:00 PM, Derek Williams de...@nebvin.ca wrote: I could be wrong here, but I think the failed requests might be due to the jsessionid that jetty adds onto the links, they may be different sizes. I am away from my computer right now and can't test it though. -- Derek Williams -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=en. -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Surf the harmonics -- You received this message because you are subscribed to the Google Groups "Lift" group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
Re: [Lift] Re: How to use prepareStatement to select *** from DB (two db vender)?
What is wrong with: DB.use(FirstDB) { firstConnection = DB.use(SecondDB) { secondConnection = // do transactional query between two DBs here } } Note that DB.use nests such that the transaction will only be committed when the last DB.use block for a given ConnectionIdentifier is exited. On Thu, Jan 21, 2010 at 3:17 AM, Neil.Lv anim...@gmail.com wrote: I have added the demo code on the Github now. ( Mabye it's a bug with DB.runQuery and DB.use in the two db vender ) Here is the address: http://github.com/anim510/two_db_demo Thanks very much! Cheers, Neil On Jan 21, 11:26 am, Neil.Lv anim...@gmail.com wrote: My email is : anim...@gmail.com On Jan 21, 11:17 am, Neil.Lv anim...@gmail.com wrote: Mabye it's a bug with DB.runQuery and DB.use in the two db vender Two question: (problem) 1: I don't know why the HelloWorld snippet code will be execute 2 times in this code. (See the HelloWorld.scala file.) 2: The dbDefaultConnectionIdentifier method in the Model that it works fine when using Mapper's method such as ModelName.findAll(), it doesn't work when using DB.runQuery and DB.use(...) --- (Maybe it can't find the default db identifier) The question 2 I test it many times that found this problem. In the test app , the Hot.getHots2 and Hot.getHots3 method can't work. I comment the code now in the HelloWorld.scala file, you can try it. I can push the code on the github, and get this errors fatal: unable to fork So If anyone know what's wrong with it and I can send the demo.tar file through the email. Thanks very much! Cheers, Neil On Jan 21, 1:56 am, Neil.Lv anim...@gmail.com wrote: The DB.runQuery can works now, but the DB.prepareStatement also cant' work. Here is the test app address: http://github.com/anim510/two_db_demo Cheers, Neil On Jan 21, 1:16 am, Neil.Lv anim...@gmail.com wrote: Thank you very much, But it doesn't work yet, maybe because of using two db connections. I'll test it later again. On Jan 21, 12:44 am, Jeppe Nejsum Madsen je...@ingolfs.dk wrote: Neil.Lv anim...@gmail.com writes: Hi all, I use two db connections in my app, and I want to use DB.prepareStatement to select the records from the second db. It failed, Here is the code: ### def getHotByTid(id : Long) = DB.use(bootstrap.liftweb.TwoDB) { conn = DB.prepareStatement(SELECT * FROM hots WHERE id=? , conn) { stmt = stmt.setLong(1, id) Log.info(stmt : + stmt) // The information is correctly now, but after call executeUpdate method stmt.executeUpdate() } } Not sure what your problem is really, but I think you should use DB.runQuery to execute a select statement Ie val (_,result) = DB.runQuery(SELECT COUNT(*), contract_length FROM + vehicles_current v + WHERE v.account_id=? + GROUP BY contract_length + ORDER BY contract_length, List(42)) /Jeppe -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=en. -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Surf the harmonics -- You received this message because you are subscribed to the Google Groups "Lift" group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
Re: [Lift] Re: 1.1-M8 to 2.0-M1 behavior change
On Thu, Jan 21, 2010 at 1:24 AM, aw anth...@whitford.com wrote: I think I discovered that my issue is related to the fact that the code is part of a CometActor/CometListener, and it sounds like S isn't fully functional from this perspective... My clue was the inStatefulScope_? method documentation. I do think I managed to work around my specific issue, but I don't fully understand this, and I'm not sure if this change in behavior was intentional. There is no HTTP request within the scope of a CometActor. This is the defined behavior. If you were somehow able to access a Req or other part of an HTTP request within the CometActor scope in a prior version of Lift, this was a bug. -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=en. -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Surf the harmonics -- You received this message because you are subscribed to the Google Groups "Lift" group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
[Lift] Re: How to use prepareStatement to select *** from DB (two db vender)?
The users table in the OneDB, and the hots table in the TwoDB, they are separated! I have changed the method that like this: ### # I specify the TwoDB for hots table. override def dbDefaultConnectionIdentifier = bootstrap.liftweb.TwoDB def getHots3(id : Long) = { DB.use(bootstrap.liftweb.OneDB) { firstConn = DB.use(bootstrap.liftweb.TwoDB) { conn = DB.prepareStatement(SELECT * FROM hots WHERE id?, conn) { stmt = stmt.setLong(1, id) stmt.executeUpdate() } } } } ### But it doesn't work. Thanks very much! :) Cheers, Neil On Jan 22, 12:49 am, David Pollak feeder.of.the.be...@gmail.com wrote: What is wrong with: DB.use(FirstDB) { firstConnection = DB.use(SecondDB) { secondConnection = // do transactional query between two DBs here } } Note that DB.use nests such that the transaction will only be committed when the last DB.use block for a given ConnectionIdentifier is exited. On Thu, Jan 21, 2010 at 3:17 AM, Neil.Lv anim...@gmail.com wrote: I have added the demo code on the Github now. ( Mabye it's a bug with DB.runQuery and DB.use in the two db vender ) Here is the address: http://github.com/anim510/two_db_demo Thanks very much! Cheers, Neil On Jan 21, 11:26 am, Neil.Lv anim...@gmail.com wrote: My email is : anim...@gmail.com On Jan 21, 11:17 am, Neil.Lv anim...@gmail.com wrote: Mabye it's a bug with DB.runQuery and DB.use in the two db vender Two question: (problem) 1: I don't know why the HelloWorld snippet code will be execute 2 times in this code. (See the HelloWorld.scala file.) 2: The dbDefaultConnectionIdentifier method in the Model that it works fine when using Mapper's method such as ModelName.findAll(), it doesn't work when using DB.runQuery and DB.use(...) --- (Maybe it can't find the default db identifier) The question 2 I test it many times that found this problem. In the test app , the Hot.getHots2 and Hot.getHots3 method can't work. I comment the code now in the HelloWorld.scala file, you can try it. I can push the code on the github, and get this errors fatal: unable to fork So If anyone know what's wrong with it and I can send the demo.tar file through the email. Thanks very much! Cheers, Neil On Jan 21, 1:56 am, Neil.Lv anim...@gmail.com wrote: The DB.runQuery can works now, but the DB.prepareStatement also cant' work. Here is the test app address: http://github.com/anim510/two_db_demo Cheers, Neil On Jan 21, 1:16 am, Neil.Lv anim...@gmail.com wrote: Thank you very much, But it doesn't work yet, maybe because of using two db connections. I'll test it later again. On Jan 21, 12:44 am, Jeppe Nejsum Madsen je...@ingolfs.dk wrote: Neil.Lv anim...@gmail.com writes: Hi all, I use two db connections in my app, and I want to use DB.prepareStatement to select the records from the second db. It failed, Here is the code: ### def getHotByTid(id : Long) = DB.use(bootstrap.liftweb.TwoDB) { conn = DB.prepareStatement(SELECT * FROM hots WHERE id=? , conn) { stmt = stmt.setLong(1, id) Log.info(stmt : + stmt) // The information is correctly now, but after call executeUpdate method stmt.executeUpdate() } } Not sure what your problem is really, but I think you should use DB.runQuery to execute a select statement Ie val (_,result) = DB.runQuery(SELECT COUNT(*), contract_length FROM + vehicles_current v + WHERE v.account_id=? + GROUP BY contract_length + ORDER BY contract_length, List(42)) /Jeppe -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=en. -- Lift, the simply functional web frameworkhttp://liftweb.net Beginning Scalahttp://www.apress.com/book/view/1430219890 Follow me:http://twitter.com/dpp Surf the harmonics -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to
Re: [Lift] Re: How to use prepareStatement to select *** from DB (two db vender)?
It doesn't work is not sufficient to diagnose. What behavior did you get, and what were you expecting? Were there any errors, log messages, exceptions, etc? If so, please copy them. Finally, if you have a reproducible test case please post it to github. I note earlier in the thread that you were fiddling with github, so if an older example is there, please make sure it's up to date with the most recent code. Thanks, -Ross On Jan 21, 2010, at 12:29 PM, Neil.Lv wrote: The users table in the OneDB, and the hots table in the TwoDB, they are separated! I have changed the method that like this: ### # I specify the TwoDB for hots table. override def dbDefaultConnectionIdentifier = bootstrap.liftweb.TwoDB def getHots3(id : Long) = { DB.use(bootstrap.liftweb.OneDB) { firstConn = DB.use(bootstrap.liftweb.TwoDB) { conn = DB.prepareStatement(SELECT * FROM hots WHERE id?, conn) { stmt = stmt.setLong(1, id) stmt.executeUpdate() } } } } ### But it doesn't work. Thanks very much! :) Cheers, Neil On Jan 22, 12:49 am, David Pollak feeder.of.the.be...@gmail.com wrote: What is wrong with: DB.use(FirstDB) { firstConnection = DB.use(SecondDB) { secondConnection = // do transactional query between two DBs here } } Note that DB.use nests such that the transaction will only be committed when the last DB.use block for a given ConnectionIdentifier is exited. On Thu, Jan 21, 2010 at 3:17 AM, Neil.Lv anim...@gmail.com wrote: I have added the demo code on the Github now. ( Mabye it's a bug with DB.runQuery and DB.use in the two db vender ) Here is the address: http://github.com/anim510/two_db_demo Thanks very much! Cheers, Neil On Jan 21, 11:26 am, Neil.Lv anim...@gmail.com wrote: My email is : anim...@gmail.com On Jan 21, 11:17 am, Neil.Lv anim...@gmail.com wrote: Mabye it's a bug with DB.runQuery and DB.use in the two db vender Two question: (problem) 1: I don't know why the HelloWorld snippet code will be execute 2 times in this code. (See the HelloWorld.scala file.) 2: The dbDefaultConnectionIdentifier method in the Model that it works fine when using Mapper's method such as ModelName.findAll(), it doesn't work when using DB.runQuery and DB.use(...) --- (Maybe it can't find the default db identifier) The question 2 I test it many times that found this problem. In the test app , the Hot.getHots2 and Hot.getHots3 method can't work. I comment the code now in the HelloWorld.scala file, you can try it. I can push the code on the github, and get this errors fatal: unable to fork So If anyone know what's wrong with it and I can send the demo.tar file through the email. Thanks very much! Cheers, Neil On Jan 21, 1:56 am, Neil.Lv anim...@gmail.com wrote: The DB.runQuery can works now, but the DB.prepareStatement also cant' work. Here is the test app address: http://github.com/anim510/two_db_demo Cheers, Neil On Jan 21, 1:16 am, Neil.Lv anim...@gmail.com wrote: Thank you very much, But it doesn't work yet, maybe because of using two db connections. I'll test it later again. On Jan 21, 12:44 am, Jeppe Nejsum Madsen je...@ingolfs.dk wrote: Neil.Lv anim...@gmail.com writes: Hi all, I use two db connections in my app, and I want to use DB.prepareStatement to select the records from the second db. It failed, Here is the code: ### def getHotByTid(id : Long) = DB.use(bootstrap.liftweb.TwoDB) { conn = DB.prepareStatement(SELECT * FROM hots WHERE id=? , conn) { stmt = stmt.setLong(1, id) Log.info(stmt : + stmt) // The information is correctly now, but after call executeUpdate method stmt.executeUpdate() } } Not sure what your problem is really, but I think you should use DB.runQuery to execute a select statement Ie val (_,result) = DB.runQuery(SELECT COUNT(*), contract_length FROM + vehicles_current v + WHERE v.account_id=? + GROUP BY contract_length + ORDER BY contract_length, List(42)) /Jeppe -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=en. -- Lift, the simply functional web frameworkhttp://liftweb.net Beginning Scalahttp://www.apress.com/book/view/1430219890 Follow me:http://twitter.com/dpp Surf the harmonics -- You
[Lift] Re: Embedding comet actor in ModalDialog
Right ... building progress bars should be quite easy but just have your page contain the comet actor.So roughly the steps would be: 1. Include your comet in the page. In this state it renders nothing visible 2. hen you open the dialog, send an ajax response 3. From your ajax scal function send a message to your comet actor to activate the progress 4. From your comet actor I assume you would know the progress of an operation and you'd send progress bar updates using partialUpdate. ... you got the idea. I'm doing something similar with multiple progress bars monitoring the progress of some backgroud server processes using comet but not really inside of a dialog. Putting them inside a modal dialog would be very easy. Br's, Marius On Jan 21, 9:54 am, ced docpom...@googlemail.com wrote: @David: Thanks. Now the approach is clear. Is that your use-case ? so see async intems coming from server only when the dialog is opened? @Marius: Yes, it is. I'd like to display a progressbar in the dialog. It seemed to me quite natural to deliver it (the comet component) along with the dialog, but as I now know that this is not possible, it's really no problem to have it prepared in the page and bring it to life when needed, i.e. make it visible. Another solution would be to redirect to a whole new page with the progressbar on it, but I wanted to look it more like a desktop application. Thanks, Chris On 20 Jan., 23:22, Marius marius.dan...@gmail.com wrote: I really don't see the need for such use-case. I mean if one wants to see async stuff in a dialog only when the dialog is opened this could be easily done via Ajax requests that will activate/deactivate async messages to client by sending from the ajax functions messages to the comet actor. Is that your use-case ? so see async intems coming from server only when the dialog is opened? Br's, Marius On Jan 20, 11:00 pm, ced docpom...@googlemail.com wrote: Hi all, I'm trying to create some sort of progress notification for a long lasting request. The idea is to answer an ajax request with a JqJsCmds.ModalDialog which embeds a comet actor like so: ajaxButton(Start process, () = ModalDialog(divdivProgress/ divlift:comet type=Progress//div)) Unfortunately this doesn't work, the dialog doesn't get displayed. Embedding a normal snippet works just fine though. The code returned in the response to the button click seems ok also. As a workaround I place the comet actor in the page enclosed in a hidden div id=progress-actorlift:comet type=Progress//div. Then I return the ModalDialog(divdivProgress/divdiv id=actor- goes-here/div) along with some JS-code that takes the progress- actor div, moves it into the actor-goes-here div and makes it visible. Does anyone tried something similar? Any help is appreciated... Chris -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
Re: [Lift] Re: Memory behavior in Jetty with CometActor - 25MB of scala.xml.Text!
On Wed, Jan 20, 2010 at 9:28 PM, mark chance mark.cha...@gmail.com wrote: I did post the project to drop.io - http://drop.io/memtest. The project does not build: Path to dependency: 1) com.peopledesigned:memtest:war:1.0-SNAPSHOT 2) org.jfree:jcommon:jar:1.0.16 Looking at your code, each of the functions created/passed as part of the SHtml.ajaxCall(), etc. calls are retained for the duration of the session. Lift garbage collects these references if there's not seen on a page for 10 minutes. However, if the GUIDs are created within the scope of a CometActor, the function is retained until the CometActor is released (in your case, for the length of the session). There are a couple of ways to deal with this: - Create a single SHtml.ajaxCall instance as part of the CometActor (rather than on each partialUpdate). - Use the CometActor's built-in JSON handler to send a message from the browser to the server. See CometActor.handleJson() The latter is the best bet for handling rich interactions with the CometActor from the client without creating lots and lots of functions. On Wed, Jan 20, 2010 at 10:06 PM, David Pollak feeder.of.the.be...@gmail.com wrote: On Wed, Jan 20, 2010 at 9:03 PM, Java1Guy mark.cha...@gmail.com wrote: Ok - i've left my Jetty server up and running with one page open... The good news is Jetty hasn't crapped out. It had 500MB of heap space used before a forced GC brought it down to 250MB. The heap dump is interesting: http://twitpic.com/z0xnx almost 25MB of Text objects used by the almost 80K displayList partial function objects in my CometActor. To me that sounds like a lot of functions! Without your actual code, there's little we can do. Thanks in advance if you can have a look. Mark On Jan 18, 6:36 pm, Java1Guy mark.cha...@gmail.com wrote: Thanks for the response. I have created a small project here: http://drop.io/memtest(btw http://drop.io/memtest%28btw - the zip file is so big because there are 3 heap dumps - before that it was only 21k!) which i believe does exhibit the problem. One comet actor page which gets updated every 20 sec. via tick. So to run this, I've built the war file and installed it into a Jetty 6.1.22 installation. The file etc/memtest.xml goes in the jetty/ contexts dir. I open my Firefox browser to the only page it shows and just leave it open for about four hours now - so the session should still be active, FWIW. An additional thing I'm noticing now is that despite not much else happening in the app, the comet responses are taking just under 20 sec. That seems huge. There are two things I notice in the heap dumps: one is the large number of xml.Text objects and their Strings, but second the 5800 anonFuncs from the DatastreamActor which are being held by the S $ProxtFuncHolder. I guess I could look up the API on that to see if there's a way to controls itsbehavior... but there it is. Thanks to anyone who takes a look at this, Mark The stdout: ConsoleActor.lowPriority.Tick...DataStreamActor.lowPriority: HostAddMsg local ds count 4 DataStreamActor.refreshStreams: now we know about stream count: 8 INFO - Service request (GET) /memtest/comet_request/2021921075/ p6s263zexmzz took 19513 Milliseconds ConsoleActor.lowPriority.Tick...DataStreamActor.lowPriority: HostAddMsg local ds count 4 DataStreamActor.refreshStreams: now we know about stream count: 8 INFO - Service request (GET) /memtest/comet_request/11287578067/ p6s263zexmzz took 19879 Milliseconds ConsoleActor.lowPriority.Tick...DataStreamActor.lowPriority: HostAddMsg local ds count 4 DataStreamActor.refreshStreams: now we know about stream count: 8 INFO - Service request (GET) /memtest/comet_request/26532853932/ p6s263zexmzz took 19868 Milliseconds ConsoleActor.lowPriority.Tick...DataStreamActor.lowPriority: HostAddMsg local ds count 4 DataStreamActor.refreshStreams: now we know about stream count: 8 INFO - Service request (GET) /memtest/comet_request/11619469749/ p6s263zexmzz took 19918 Milliseconds On Jan 16, 2:32 am, Marius marius.dan...@gmail.com wrote: Lift GC is likely keeping your functions to not expire but this is meant to be that way ... but this doesn't explain the large amount of functions. Can you post a minimalistic example of your app where you can reproduce thisbehavior? Br's, Marius -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=en. -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp
Re: [Lift] Re: How to use prepareStatement to select *** from DB (two db vender)?
On Thu, Jan 21, 2010 at 9:29 AM, Neil.Lv anim...@gmail.com wrote: The users table in the OneDB, and the hots table in the TwoDB, they are separated! I have changed the method that like this: ### # I specify the TwoDB for hots table. override def dbDefaultConnectionIdentifier = bootstrap.liftweb.TwoDB def getHots3(id : Long) = { DB.use(bootstrap.liftweb.OneDB) { firstConn = DB.use(bootstrap.liftweb.TwoDB) { conn = DB.prepareStatement(SELECT * FROM hots WHERE id?, conn) { stmt = stmt.setLong(1, id) stmt.executeUpdate() } } } } ### But it doesn't work. What do it doesn't work mean? Does it not compile, if not, what's the compilation error? If it's another error, what's the error? In your example, you are not using the firstConn connection. Also, you will get an exception if you do an executeUpdate with a SELECT statement (this is JDBC, not Lift). You must do an executeQuery for a SELECT. Thanks very much! :) Cheers, Neil On Jan 22, 12:49 am, David Pollak feeder.of.the.be...@gmail.com wrote: What is wrong with: DB.use(FirstDB) { firstConnection = DB.use(SecondDB) { secondConnection = // do transactional query between two DBs here } } Note that DB.use nests such that the transaction will only be committed when the last DB.use block for a given ConnectionIdentifier is exited. On Thu, Jan 21, 2010 at 3:17 AM, Neil.Lv anim...@gmail.com wrote: I have added the demo code on the Github now. ( Mabye it's a bug with DB.runQuery and DB.use in the two db vender ) Here is the address: http://github.com/anim510/two_db_demo Thanks very much! Cheers, Neil On Jan 21, 11:26 am, Neil.Lv anim...@gmail.com wrote: My email is : anim...@gmail.com On Jan 21, 11:17 am, Neil.Lv anim...@gmail.com wrote: Mabye it's a bug with DB.runQuery and DB.use in the two db vender Two question: (problem) 1: I don't know why the HelloWorld snippet code will be execute 2 times in this code. (See the HelloWorld.scala file.) 2: The dbDefaultConnectionIdentifier method in the Model that it works fine when using Mapper's method such as ModelName.findAll(), it doesn't work when using DB.runQuery and DB.use(...) --- (Maybe it can't find the default db identifier) The question 2 I test it many times that found this problem. In the test app , the Hot.getHots2 and Hot.getHots3 method can't work. I comment the code now in the HelloWorld.scala file, you can try it. I can push the code on the github, and get this errors fatal: unable to fork So If anyone know what's wrong with it and I can send the demo.tar file through the email. Thanks very much! Cheers, Neil On Jan 21, 1:56 am, Neil.Lv anim...@gmail.com wrote: The DB.runQuery can works now, but the DB.prepareStatement also cant' work. Here is the test app address: http://github.com/anim510/two_db_demo Cheers, Neil On Jan 21, 1:16 am, Neil.Lv anim...@gmail.com wrote: Thank you very much, But it doesn't work yet, maybe because of using two db connections. I'll test it later again. On Jan 21, 12:44 am, Jeppe Nejsum Madsen je...@ingolfs.dk wrote: Neil.Lv anim...@gmail.com writes: Hi all, I use two db connections in my app, and I want to use DB.prepareStatement to select the records from the second db. It failed, Here is the code: ### def getHotByTid(id : Long) = DB.use(bootstrap.liftweb.TwoDB) { conn = DB.prepareStatement(SELECT * FROM hots WHERE id=? , conn) { stmt = stmt.setLong(1, id) Log.info(stmt : + stmt) // The information is correctly now, but after call executeUpdate method stmt.executeUpdate() } } Not sure what your problem is really, but I think you should use DB.runQuery to execute a select statement Ie val (_,result) = DB.runQuery(SELECT COUNT(*), contract_length FROM + vehicles_current v + WHERE v.account_id=? + GROUP BY contract_length + ORDER BY contract_length, List(42)) /Jeppe -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send
[Lift] Re: Ideas for how to inject QueryParams into find() and findAll()
I will implement it into my own MetaMapper-sub-trait so all of my models can share the code. Thank you all for your input! On Jan 21, 9:44 am, Jeppe Nejsum Madsen je...@ingolfs.dk wrote: Naftoli Gugenheim naftoli...@gmail.com writes: Why not define a new method? def findByCurUser(params: QueryParam*) = User.currentUser.flatMap(user= find((Seq(By(User.username, user.username.is)) ++ params): _*)) find returns a Box and currentUser does too, so flatMap flattens them into one. Basically find takes a varargs and you're passing a Seq instead using : _*, and that Seq contains the user and other params. You could probably write params + By(User.username, user.username.is) instead of the reverse order, as it's shorter than the previous version. The problem with this solution is that you cannot use any of Lift's builtin stuff such as CRUDify. If you wan't to create a multitenant service with only a single set of tables, you wan't do make damn sure that each customer only sees his/her own data :-) /Jeppe -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
[Lift] Re: [scala-internals] RC8 candidate for the first 2.8.0 beta
I've written a work-around and am currently testing the code more in a few minutes. On Thu, Jan 21, 2010 at 11:20 AM, David Pollak feeder.of.the.be...@gmail.com wrote: Okay... it looks like the VarArg stuff is messing with the compiler: case class Index[A : Mapper[A]](columns: Seq[IndexItem[A]]) works just fine, but: case class Index[A : Mapper[A]](columns: IndexItem[A] *) Fails. On Thu, Jan 21, 2010 at 10:51 AM, Heiko Seeberger heiko.seeber...@googlemail.com wrote: When updating from RC7 to RC8 we observe the following compiler error: [ERROR] .../lift-mapper/src/main/scala/net/liftweb/mapper/MetaMapper.scala:1262: error: type arguments [net.liftweb.mapper.IndexItem[A]] do not conform to method sameElements's type parameter bounds [B : net.liftweb.mapper.IndexItem[Any]] [INFO] case class Index[A : Mapper[A]](indexColumns : IndexItem[A]*) extends BaseIndex[A](indexColumns : _*) Any ideas what could be going wrong here? Attached you will find the full source file. Heiko 2010/1/18 Antonio Cunei antonio.cu...@epfl.ch All, A new release candidate for 2.8.0.Beta1 is available for testing. You can obtain the new candidate from the links below, as well as from the scala-tools.org Maven repository: http://www.scala-lang.org/downloads/distrib/files/scala-2.8.0.Beta1-RC8.tgz http://www.scala-lang.org/downloads/distrib/files/scala-2.8.0.Beta1-RC8.zip http://www.scala-lang.org/downloads/distrib/files/scala-2.8.0.Beta1-RC8-installer.jar http://www.scala-lang.org/downloads/distrib/files/scala-2.8.0.Beta1-RC8-devel-docs.tgz http://www.scala-lang.org/downloads/distrib/files/scala-2.8.0.Beta1-RC8-sources.tgz http://www.scala-lang.org/downloads/distrib/files/scala.library_2.8.0.Beta1-RC8.jar This is a candidate for the first, preliminary beta release of 2.8.0: it is only intended to help developers port their code onto the new 2.8 codebase, and it is not production-quality code. Developers: this version includes the very latest fixes and updates to the Scala 2.8 codebase. Kindly test this last RC as well, and let us know if you detect anything unusual. Thanks! Toni -- Heiko Seeberger Work: weiglewilczek.com Blog: heikoseeberger.name Follow me: twitter.com/hseeberger OSGi on Scala: scalamodules.org Lift, the simply functional web framework: liftweb.net -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Surf the harmonics -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Surf the harmonics -- You received this message because you are subscribed to the Google Groups "Lift" group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
[Lift] Re: [scala-internals] RC8 candidate for the first 2.8.0 beta
(Un)fortunately I have an idea what the problem is. It's probably my fix for #2867. I have now rolled back that fix in r20629. Can you check again whether it works with that revision (should be in the nightly tomorrow)? If it does we might be able to make an exception to our RC = final rule, because this one just rolls back a non-critical patch, so I fail to see how this could affect anything but the original ticket. Cheers -- Martin -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
[Lift] Re: [scala-internals] RC8 candidate for the first 2.8.0 beta
On Thu, Jan 21, 2010 at 8:31 PM, David Pollak feeder.of.the.be...@gmail.com wrote: I've written a work-around and am currently testing the code more in a few minutes. If you can make it work, so much the better. To give some info: The original ticket had a vararg parameter of the form List[_]* in a case class. This caused type inference for the synthetic equals method (which uses sameElements for varargs) to fail, because the existential in List[_] made the problem underconstrained. The patch passed the argument type explicitly as the type parameter. In the lift case, it seems that this explicit type parameter violated some type bound, so the type inferencer should have chosen a more general type which would not violate the bound. The easiest fix is probably to just roll back and leave ticket #2867 open until we find a better solution. That's what I have done. Cheers -- Martin -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
[Lift] Re: [scala-internals] RC8 candidate for the first 2.8.0 beta
Okay... the work-around is checked into the Lift repo. I say, Ship RC8 as the beta and we'll work through this (and likely other) issues during the beta period. On Thu, Jan 21, 2010 at 11:36 AM, martin odersky martin.oder...@epfl.chwrote: On Thu, Jan 21, 2010 at 8:31 PM, David Pollak feeder.of.the.be...@gmail.com wrote: I've written a work-around and am currently testing the code more in a few minutes. If you can make it work, so much the better. To give some info: The original ticket had a vararg parameter of the form List[_]* in a case class. This caused type inference for the synthetic equals method (which uses sameElements for varargs) to fail, because the existential in List[_] made the problem underconstrained. The patch passed the argument type explicitly as the type parameter. In the lift case, it seems that this explicit type parameter violated some type bound, so the type inferencer should have chosen a more general type which would not violate the bound. The easiest fix is probably to just roll back and leave ticket #2867 open until we find a better solution. That's what I have done. Cheers -- Martin -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Surf the harmonics -- You received this message because you are subscribed to the Google Groups "Lift" group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
[Lift] Re: [scala-internals] RC8 candidate for the first 2.8.0 beta
On Thu, Jan 21, 2010 at 8:37 PM, David Pollak feeder.of.the.be...@gmail.com wrote: Okay... the work-around is checked into the Lift repo. I say, Ship RC8 as the beta and we'll work through this (and likely other) issues during the beta period. Sounds good. Thanks! -- Martin On Thu, Jan 21, 2010 at 11:36 AM, martin odersky martin.oder...@epfl.ch wrote: On Thu, Jan 21, 2010 at 8:31 PM, David Pollak feeder.of.the.be...@gmail.com wrote: I've written a work-around and am currently testing the code more in a few minutes. If you can make it work, so much the better. To give some info: The original ticket had a vararg parameter of the form List[_]* in a case class. This caused type inference for the synthetic equals method (which uses sameElements for varargs) to fail, because the existential in List[_] made the problem underconstrained. The patch passed the argument type explicitly as the type parameter. In the lift case, it seems that this explicit type parameter violated some type bound, so the type inferencer should have chosen a more general type which would not violate the bound. The easiest fix is probably to just roll back and leave ticket #2867 open until we find a better solution. That's what I have done. Cheers -- Martin -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Surf the harmonics -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
Re: [Lift] Mapper FKs
I'm okay with making the flag optional (but on by default with a breaking changes notice) for the H2 database. On Wed, Jan 20, 2010 at 11:09 AM, Naftoli Gugenheim naftoli...@gmail.comwrote: David and everone, Some time ago we discussed on this list what it would take to have Schemifier generate foreign key constraints. The obvious reason why it doesn't currently is because the relevant flag on all the DriverTypes is set to false. Derek was going to work on it but he got busy and didn't get far. Now, I personally, on my local repository, enabled foreign key generation for H2 and it seems to have worked fine (although it gave me plenty of work manually fixing the integrity of my client's database so the keys could be generated successfully). In order for the tests to be successful, I had to change my ManyToManySpecs (if that's what it's called) to use a dummy DriverType with FK generation off, so it could test ManyToMany with broken joins. In any case, my quesion is, what criteria have to be fulfilled to push this (besides ReviewBoard approval obviously :) )? What level of testing? I assume it should be controllable with a flag that should, at least temporarily, be false. What form should this setting take? What other features should be supported? Different ON UPDATE/DELETE actions? Note that this is not the most immediate thing on my plate but I did already start as mentioned. Thanks. -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=en. -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Surf the harmonics -- You received this message because you are subscribed to the Google Groups "Lift" group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
[Lift] Mindless work...
Folks, It's looking like Scala 2.8 RC8 will become 2.8 Beta1 on Tuesday. I'd like to get the Lift 2.8 branch up to date (and keep it up to date) with the 2.0-SNAPSHOT branch as well as getting continuous builds on Hudson and deployment in the scala-tools.org snapshots directory. I think our best bet to get the 2.8 branch up to date with 2.0-SNAPSHOT is to restart the port based on the work that Heiko is doing: http://github.com/dpp/liftweb/issues#issue/292 I have time to do the mindless work of doing the port tonight (my brain will explode if it has to think, but mindless is okay). So: - Heiko -- how far along is the stuff in issue 292? Is this code on the irc_issue_292 branch? Can I work on this branch tonight? - Indrajit -- Do you have the multi-thingy pom.xml stuff set up so we can build a 2.7.7 version and a 2.8 version with different names (2.0-SNAPSHOT and 2.0_S28-SNAPSHOT) from the same source tree? What's the timing for getting Hudson all prepared? Thanks, David (who is very serious about making Lift on Scala 2.8 very successful) -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Surf the harmonics -- You received this message because you are subscribed to the Google Groups "Lift" group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
Re: [Lift] Re: A better approach to ajax forms?
Those names seem counterintuitive to me. ajaxSubmit submits an ajax form but submitAjaxForm submits a non-ajax form? submitAjaxForm implies that it should be the reverse, no? - Mariusmarius.dan...@gmail.com wrote: Instead of submit - SHtml.submit(Parse, () = ()) use: submit - SHtml.ajaxSubmit(Parse, () = ()) you can also send normal forms via ajax like: SHtml.submitAjaxForm(formId, () = { /// Do your stuff here. This function will be called after form field functions are executed. Noop }) Br's, Marius On Jan 21, 9:03 pm, Kris Nuttycombe kris.nuttyco...@gmail.com wrote: *thump* *thump* Hello, is this thing on? :) On Wed, Jan 20, 2010 at 10:20 AM, Kris Nuttycombe kris.nuttyco...@gmail.com wrote: On Wed, Jan 20, 2010 at 9:51 AM, Kris Nuttycombe kris.nuttyco...@gmail.com wrote: On Wed, Jan 20, 2010 at 9:39 AM, Kris Nuttycombe kris.nuttyco...@gmail.com wrote: Hi, all, I'm working on an AJAX form and feel like I'm missing something: namely, how to update the page based upon the result of the form submission. The three ajaxForm methods in SHtml have the following signatures: def ajaxForm(body : NodeSeq) def ajaxForm(body : NodeSeq, onSubmit : JsCmd) def ajaxForm(body : NodeSeq, onSubmit : JsCmd, postSubmit : JsCmd) In these signatures, onSubmit is called by the client prior to form submission, and postSubmit is called by the client after successful submission. My question is, why is there not a signature like this: def ajaxForm(body: NodeSeq, result: () = JsCmd) for which the specified result function will be called, and the JsCmd returned to the browser for evaluation after processing of the form contents on the server? Right now, I'm using the following to achieve this effect, but it seems really hacky: val (psId, psJs) = ajaxCall(JsRaw(dsl_text.value), text = After(20, SetHtml(results, parse(text ajaxForm( bind(plan, xhtml, dsl - SHtml.textarea(, s = (), id - dsl_text, rows - 40, cols - 120), submit - SHtml.submit(Parse, () = ()) ), psJs.cmd ) Here, JsCmd is actually doing the heavy lifting prior to form submission, with noop implementations for handling of the form elements. Seems really hacky. I feel like I've got to be missing something here, like there's got to be a better way to implement this such that the parsing of the textarea contents can be done by the closure passed to the SHtml.textarea call. How can I do this? Here's an idea I've been toying with for a while; it would be a somewhat significant change to Lift but I feel like there would be some benefits. Instead of SHtml.* having signatures like (String, () = Any, (String, String)*) = NodeSeq, imagine that there was a parameterized class (call it FormElement) that all of the SHtml methods returned, and then an implicit conversion from FormElement to NodeSeq. Might look something like this: trait FormElement[T] { def !: T def toNodeSeq: NodeSeq } An addendum: there's an obvious extension available here: trait FormElement[T] { self = def !: T def toNodeSeq: NodeSeq def map[U](f: T = U): FormElement[U] = new FormElement[U] { lazy val !: U = f(self!) lazy val toNodeSeq: NodeSeq = self.toNodeSeq } def flatMap[U](f: T = FormElement[U]): FormElement[U] = new FormElement[U] { private lazy val cache = f(self!) lazy val !: U = cache! lazy val toNodeSeq = self.toNodeSeq ++ cache.toNodeSeq } } On second thought, that FormElement implementation as a monad is wrong because toNodeSeq would cause strict evaluation of the closure when used in the SHtml.* case. Maybe FormElement just has to be a functor and not a monad. Kris -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en. -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
[Lift] Version of maven for lift
What is Lift's recommended version of Maven? I am looking to create an sbaz package for easy download and install for maven for newcomers (myself included), and figure that having one that is compatible with lift would be of prime interest. Is the latest and greatest version compatible with 2.0? Regards, James -- You received this message because you are subscribed to the Google Groups "Lift" group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
Re: [Lift] Re: A better approach to ajax forms?
On Thu, Jan 21, 2010 at 12:23 PM, Marius marius.dan...@gmail.com wrote: Instead of submit - SHtml.submit(Parse, () = ()) use: submit - SHtml.ajaxSubmit(Parse, () = ()) you can also send normal forms via ajax like: SHtml.submitAjaxForm(formId, () = { /// Do your stuff here. This function will be called after form field functions are executed. Noop }) Br's, Marius Thanks, Marius. I've just updated from M1 to the snapshot to get ajaxSubmit; however, it doesn't address my question as to why the function passed to AjaxSubmit doesn't return a JsCmd that can be used to refresh the page. Also, any thoughts on my proposal? Kris On Jan 21, 9:03 pm, Kris Nuttycombe kris.nuttyco...@gmail.com wrote: *thump* *thump* Hello, is this thing on? :) On Wed, Jan 20, 2010 at 10:20 AM, Kris Nuttycombe kris.nuttyco...@gmail.com wrote: On Wed, Jan 20, 2010 at 9:51 AM, Kris Nuttycombe kris.nuttyco...@gmail.com wrote: On Wed, Jan 20, 2010 at 9:39 AM, Kris Nuttycombe kris.nuttyco...@gmail.com wrote: Hi, all, I'm working on an AJAX form and feel like I'm missing something: namely, how to update the page based upon the result of the form submission. The three ajaxForm methods in SHtml have the following signatures: def ajaxForm(body : NodeSeq) def ajaxForm(body : NodeSeq, onSubmit : JsCmd) def ajaxForm(body : NodeSeq, onSubmit : JsCmd, postSubmit : JsCmd) In these signatures, onSubmit is called by the client prior to form submission, and postSubmit is called by the client after successful submission. My question is, why is there not a signature like this: def ajaxForm(body: NodeSeq, result: () = JsCmd) for which the specified result function will be called, and the JsCmd returned to the browser for evaluation after processing of the form contents on the server? Right now, I'm using the following to achieve this effect, but it seems really hacky: val (psId, psJs) = ajaxCall(JsRaw(dsl_text.value), text = After(20, SetHtml(results, parse(text ajaxForm( bind(plan, xhtml, dsl - SHtml.textarea(, s = (), id - dsl_text, rows - 40, cols - 120), submit - SHtml.submit(Parse, () = ()) ), psJs.cmd ) Here, JsCmd is actually doing the heavy lifting prior to form submission, with noop implementations for handling of the form elements. Seems really hacky. I feel like I've got to be missing something here, like there's got to be a better way to implement this such that the parsing of the textarea contents can be done by the closure passed to the SHtml.textarea call. How can I do this? Here's an idea I've been toying with for a while; it would be a somewhat significant change to Lift but I feel like there would be some benefits. Instead of SHtml.* having signatures like (String, () = Any, (String, String)*) = NodeSeq, imagine that there was a parameterized class (call it FormElement) that all of the SHtml methods returned, and then an implicit conversion from FormElement to NodeSeq. Might look something like this: trait FormElement[T] { def !: T def toNodeSeq: NodeSeq } An addendum: there's an obvious extension available here: trait FormElement[T] { self = def !: T def toNodeSeq: NodeSeq def map[U](f: T = U): FormElement[U] = new FormElement[U] { lazy val !: U = f(self!) lazy val toNodeSeq: NodeSeq = self.toNodeSeq } def flatMap[U](f: T = FormElement[U]): FormElement[U] = new FormElement[U] { private lazy val cache = f(self!) lazy val !: U = cache! lazy val toNodeSeq = self.toNodeSeq ++ cache.toNodeSeq } } On second thought, that FormElement implementation as a monad is wrong because toNodeSeq would cause strict evaluation of the closure when used in the SHtml.* case. Maybe FormElement just has to be a functor and not a monad. Kris -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en. -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
[Lift] Re: [lift] Version of maven for lift
I use maven 2.2.1 without any problem. i prefer to use sbt these days which still makes use of mvn repositories. James Matlik wrote: What is Lift's recommended version of Maven? I am looking to create an sbaz package for easy download and install for maven for newcomers (myself included), and figure that having one that is compatible with lift would be of prime interest. Is the latest and greatest version compatible with 2.0? Regards, James -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en. -- View this message in context: http://old.nabble.com/Version-of-maven-for-lift-tp27264662p27264918.html Sent from the liftweb mailing list archive at Nabble.com. -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
[Lift] Re: A better approach to ajax forms?
On Jan 21, 11:15 pm, Kris Nuttycombe kris.nuttyco...@gmail.com wrote: On Thu, Jan 21, 2010 at 12:23 PM, Marius marius.dan...@gmail.com wrote: Instead of submit - SHtml.submit(Parse, () = ()) use: submit - SHtml.ajaxSubmit(Parse, () = ()) you can also send normal forms via ajax like: SHtml.submitAjaxForm(formId, () = { /// Do your stuff here. This function will be called after form field functions are executed. Noop }) Br's, Marius Thanks, Marius. I've just updated from M1 to the snapshot to get ajaxSubmit; however, it doesn't address my question as to why the function passed to AjaxSubmit doesn't return a JsCmd that can be used to refresh the page. The ajaxSubmit has the signature: def ajaxSubmit(value: String, func: () = Any, attrs: (String, String) *) returns an Any because Lift looks for the following: JsCmd, NodeSeq JsCommands LiftResponse however for consistency reasons I think I should change it to func: () = JsCmd Also, any thoughts on my proposal? I don't really see the benefits in doing that. Kris On Jan 21, 9:03 pm, Kris Nuttycombe kris.nuttyco...@gmail.com wrote: *thump* *thump* Hello, is this thing on? :) On Wed, Jan 20, 2010 at 10:20 AM, Kris Nuttycombe kris.nuttyco...@gmail.com wrote: On Wed, Jan 20, 2010 at 9:51 AM, Kris Nuttycombe kris.nuttyco...@gmail.com wrote: On Wed, Jan 20, 2010 at 9:39 AM, Kris Nuttycombe kris.nuttyco...@gmail.com wrote: Hi, all, I'm working on an AJAX form and feel like I'm missing something: namely, how to update the page based upon the result of the form submission. The three ajaxForm methods in SHtml have the following signatures: def ajaxForm(body : NodeSeq) def ajaxForm(body : NodeSeq, onSubmit : JsCmd) def ajaxForm(body : NodeSeq, onSubmit : JsCmd, postSubmit : JsCmd) In these signatures, onSubmit is called by the client prior to form submission, and postSubmit is called by the client after successful submission. My question is, why is there not a signature like this: def ajaxForm(body: NodeSeq, result: () = JsCmd) for which the specified result function will be called, and the JsCmd returned to the browser for evaluation after processing of the form contents on the server? Right now, I'm using the following to achieve this effect, but it seems really hacky: val (psId, psJs) = ajaxCall(JsRaw(dsl_text.value), text = After(20, SetHtml(results, parse(text ajaxForm( bind(plan, xhtml, dsl - SHtml.textarea(, s = (), id - dsl_text, rows - 40, cols - 120), submit - SHtml.submit(Parse, () = ()) ), psJs.cmd ) Here, JsCmd is actually doing the heavy lifting prior to form submission, with noop implementations for handling of the form elements. Seems really hacky. I feel like I've got to be missing something here, like there's got to be a better way to implement this such that the parsing of the textarea contents can be done by the closure passed to the SHtml.textarea call. How can I do this? Here's an idea I've been toying with for a while; it would be a somewhat significant change to Lift but I feel like there would be some benefits. Instead of SHtml.* having signatures like (String, () = Any, (String, String)*) = NodeSeq, imagine that there was a parameterized class (call it FormElement) that all of the SHtml methods returned, and then an implicit conversion from FormElement to NodeSeq. Might look something like this: trait FormElement[T] { def !: T def toNodeSeq: NodeSeq } An addendum: there's an obvious extension available here: trait FormElement[T] { self = def !: T def toNodeSeq: NodeSeq def map[U](f: T = U): FormElement[U] = new FormElement[U] { lazy val !: U = f(self!) lazy val toNodeSeq: NodeSeq = self.toNodeSeq } def flatMap[U](f: T = FormElement[U]): FormElement[U] = new FormElement[U] { private lazy val cache = f(self!) lazy val !: U = cache! lazy val toNodeSeq = self.toNodeSeq ++ cache.toNodeSeq } } On second thought, that FormElement implementation as a monad is wrong because toNodeSeq would cause strict evaluation of the closure when used in the SHtml.* case. Maybe FormElement just has to be a functor and not a monad. Kris -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group athttp://groups.google.com/group/liftweb?hl=en. -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to
[Lift] Re: Snippet question
One last question, is there any way to give an ajaxText some kind of style/class/id attribute? I looked at the source but it was really hard to get the hang of it. best regards. On 21 Jan., 02:05, Franz Bettag fr...@bett.ag wrote: Ah, i was already wondering if that was a typo or what it does =) thank you very much. The project is coming along nicely. You really notice the performance difference between our old one (ruby based) and scala. Lift delivery the list of all subnets in 2.6 seconds. Merb needed almost 8 seconds for the same request. I must admit that the merb project used amqp to collect remote data and i use akka now, but the performance boost is kinda incredible. Also on the merb-implementation, i had most of the rendering done by JS since rendering everything with ruby slowed down everything for another few seconds, on lift it works even faster on the client side since it already does the output-generation in a nip of a second. Kudos! On 21 Jan., 01:24, Ross Mellgren dri...@gmail.com wrote: Use to combine JsCmd. e.g. JsShowId(ajax-spinner) SetHtml(subnet-1234, spanmy awesome subnet contents/span) -Ross On Jan 20, 2010, at 7:16 PM, Franz Bettag wrote: Works like a charm now! Thanks! One last question tho, is it possible to get a client-Side-callback for net.liftweb.http.SHtml.a? I want to start showing a specific ajax spinner (have more than one on the page) upon pressing a special link. I don't get how i might chain them together. :) On 20 Jan., 22:15, Franz Bettag fr...@bett.ag wrote: Of course i forgot to paste the snippet..http://pastie.org/787160 On 20 Jan., 21:44, Ross Mellgren dri...@gmail.com wrote: Scala can't figure out what type of parameter you mean, so you need to annotate it -- expand - (fooXhtml: NodeSeq) = {... } Or use a separately named function with a type signature, e.g. def doTheStuff(ns: NodeSeq): NodeSeq) = { Log.error(ns.toStrnig); span / } bind(..., expand - doTheStuff _) -Ross On Jan 20, 2010, at 3:41 PM, Franz Bettag wrote: expand - (fooXhtml) = { Log.error(fooXhtml.toString); span/ }, error: not a legal formal parameter (pointing at the = ) On 20 Jan., 21:32, greekscala hellectro...@gmail.com wrote: Hello, yes a function that takes NodeSeq parameter and returns a NodeSeq :) foo - (ns) = {function body} or foo - theCalledFunction best regards On 20 Jan., 21:26, Franz Bettag fr...@bett.ag wrote: How would that look like? foo = nodeSeqMethod _ ? On 20 Jan., 21:21, Naftoli Gugenheim naftoli...@gmail.com wrote: Meaning to the right of the - arrow. - Franz Bettagfr...@bett.ag wrote: Ah figured it out. Played long enough around to get the right way: () = {expand(trafficReply.subnet)} Another question though, would it be possible to use IPs:expandspantraffic:sometag//span/IPs:expand and pass the given NodeSeq over the bind into a function? On 20 Jan., 19:08, Franz Bettag fr...@bett.ag wrote: Sorry if i am asking a lot of questions lately, but i am trying to get this project of mine working so i can write about the specific problems i ran into and how they got done. def subnets(xhtml: NodeSeq): NodeSeq = { val content = IPnet.findAll(OrderBy(IPnet.name, Ascending)).map(ip = { /* Bind the xml */ bind(ip, xhtml, subnet - Text(ip.name.toString), action - SHtml.a(expand(ip.subnet) _, See all IPs) ) }).mkString XML.loadString(span%s/span.format(content)) } def expand(subnet: String): JsCmd = { Log.info(Requested subnet %s.format(subnet)) Alert(subnet %s was requested.format(subnet)) } The Problem is the action that gets binded. I don't get how i have to use SHtml.a to pass a value to the called function. Any hints? Thank you very much in advance -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group athttp://groups.google.com/group/liftweb?hl=en. -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group athttp://groups.google.com/group/liftweb?hl=en. -- You received this message because you are subscribed to the Google Groups Lift group.
Re: [Lift] Re: Snippet question
The signature of ajaxText is: def ajaxText(value : String, func : (String) = JsCmd, attrs : (String, String)*): Elem def ajaxText(value : String, jsFunc : Call, func : (String) = JsCmd, attrs : (String, String)*): Elem The attrs vararg is for this purpose, just pass in additional attributes you want there. Note that you should not pass the name attribute, as that is generated by Lift. -Ross On Jan 21, 2010, at 4:43 PM, Franz Bettag wrote: One last question, is there any way to give an ajaxText some kind of style/class/id attribute? I looked at the source but it was really hard to get the hang of it. best regards. On 21 Jan., 02:05, Franz Bettag fr...@bett.ag wrote: Ah, i was already wondering if that was a typo or what it does =) thank you very much. The project is coming along nicely. You really notice the performance difference between our old one (ruby based) and scala. Lift delivery the list of all subnets in 2.6 seconds. Merb needed almost 8 seconds for the same request. I must admit that the merb project used amqp to collect remote data and i use akka now, but the performance boost is kinda incredible. Also on the merb-implementation, i had most of the rendering done by JS since rendering everything with ruby slowed down everything for another few seconds, on lift it works even faster on the client side since it already does the output-generation in a nip of a second. Kudos! On 21 Jan., 01:24, Ross Mellgren dri...@gmail.com wrote: Use to combine JsCmd. e.g. JsShowId(ajax-spinner) SetHtml(subnet-1234, spanmy awesome subnet contents/span) -Ross On Jan 20, 2010, at 7:16 PM, Franz Bettag wrote: Works like a charm now! Thanks! One last question tho, is it possible to get a client-Side-callback for net.liftweb.http.SHtml.a? I want to start showing a specific ajax spinner (have more than one on the page) upon pressing a special link. I don't get how i might chain them together. :) On 20 Jan., 22:15, Franz Bettag fr...@bett.ag wrote: Of course i forgot to paste the snippet..http://pastie.org/787160 On 20 Jan., 21:44, Ross Mellgren dri...@gmail.com wrote: Scala can't figure out what type of parameter you mean, so you need to annotate it -- expand - (fooXhtml: NodeSeq) = {... } Or use a separately named function with a type signature, e.g. def doTheStuff(ns: NodeSeq): NodeSeq) = { Log.error(ns.toStrnig); span / } bind(..., expand - doTheStuff _) -Ross On Jan 20, 2010, at 3:41 PM, Franz Bettag wrote: expand - (fooXhtml) = { Log.error(fooXhtml.toString); span/ }, error: not a legal formal parameter (pointing at the = ) On 20 Jan., 21:32, greekscala hellectro...@gmail.com wrote: Hello, yes a function that takes NodeSeq parameter and returns a NodeSeq :) foo - (ns) = {function body} or foo - theCalledFunction best regards On 20 Jan., 21:26, Franz Bettag fr...@bett.ag wrote: How would that look like? foo = nodeSeqMethod _ ? On 20 Jan., 21:21, Naftoli Gugenheim naftoli...@gmail.com wrote: Meaning to the right of the - arrow. - Franz Bettagfr...@bett.ag wrote: Ah figured it out. Played long enough around to get the right way: () = {expand(trafficReply.subnet)} Another question though, would it be possible to use IPs:expandspantraffic:sometag//span/IPs:expand and pass the given NodeSeq over the bind into a function? On 20 Jan., 19:08, Franz Bettag fr...@bett.ag wrote: Sorry if i am asking a lot of questions lately, but i am trying to get this project of mine working so i can write about the specific problems i ran into and how they got done. def subnets(xhtml: NodeSeq): NodeSeq = { val content = IPnet.findAll(OrderBy(IPnet.name, Ascending)).map(ip = { /* Bind the xml */ bind(ip, xhtml, subnet - Text(ip.name.toString), action - SHtml.a(expand(ip.subnet) _, See all IPs) ) }).mkString XML.loadString(span%s/span.format(content)) } def expand(subnet: String): JsCmd = { Log.info(Requested subnet %s.format(subnet)) Alert(subnet %s was requested.format(subnet)) } The Problem is the action that gets binded. I don't get how i have to use SHtml.a to pass a value to the called function. Any hints? Thank you very much in advance -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group athttp://groups.google.com/group/liftweb?hl=en. -- You received this message because you are subscribed to the Google Groups Lift group. To
Re: [Lift] Re: A better approach to ajax forms?
On Thu, Jan 21, 2010 at 2:43 PM, Marius marius.dan...@gmail.com wrote: On Jan 21, 11:15 pm, Kris Nuttycombe kris.nuttyco...@gmail.com wrote: On Thu, Jan 21, 2010 at 12:23 PM, Marius marius.dan...@gmail.com wrote: Instead of submit - SHtml.submit(Parse, () = ()) use: submit - SHtml.ajaxSubmit(Parse, () = ()) you can also send normal forms via ajax like: SHtml.submitAjaxForm(formId, () = { /// Do your stuff here. This function will be called after form field functions are executed. Noop }) Br's, Marius Thanks, Marius. I've just updated from M1 to the snapshot to get ajaxSubmit; however, it doesn't address my question as to why the function passed to AjaxSubmit doesn't return a JsCmd that can be used to refresh the page. The ajaxSubmit has the signature: def ajaxSubmit(value: String, func: () = Any, attrs: (String, String) *) returns an Any because Lift looks for the following: JsCmd, NodeSeq JsCommands LiftResponse however for consistency reasons I think I should change it to func: () = JsCmd Also, any thoughts on my proposal? I don't really see the benefits in doing that. The benefit is predictability; with the current functionality, as I understand it, the order of evaluation of closures associated with form elements is dependent upon the order in which those elements are added to the form. What my proposal does is (1) eliminate the need to close over local vars and (2) eliminate the dependence upon order of declaration. In essence, my proposal is to give the user the ability to, in addition to having those closures invoked automatically on the processing of a form, be able to explicitly invoke them during form processing. I really dislike the pattern: def mySnippet(xhtml: NodeSeq) { var a: Option[String] = None bind(a, xhtml, value - text(. s = a = Some(s)), submit - submit(Submit, () = a.foreach(doSomething _) ) } With my proposal, this would become: def mySnippet(xhtml: NodeSeq) { val aField = text(s, s = s) bind(a, xhtml, value - aField, submit - submit(Submit, () = doSomething(a!)) ) } This becomes really advantageous, I think, when you're talking about 15 or 20 different form elements. The var solution in that case becomes totally unwieldy because of the unwrapping of all of the Options. Kris Kris On Jan 21, 9:03 pm, Kris Nuttycombe kris.nuttyco...@gmail.com wrote: *thump* *thump* Hello, is this thing on? :) On Wed, Jan 20, 2010 at 10:20 AM, Kris Nuttycombe kris.nuttyco...@gmail.com wrote: On Wed, Jan 20, 2010 at 9:51 AM, Kris Nuttycombe kris.nuttyco...@gmail.com wrote: On Wed, Jan 20, 2010 at 9:39 AM, Kris Nuttycombe kris.nuttyco...@gmail.com wrote: Hi, all, I'm working on an AJAX form and feel like I'm missing something: namely, how to update the page based upon the result of the form submission. The three ajaxForm methods in SHtml have the following signatures: def ajaxForm(body : NodeSeq) def ajaxForm(body : NodeSeq, onSubmit : JsCmd) def ajaxForm(body : NodeSeq, onSubmit : JsCmd, postSubmit : JsCmd) In these signatures, onSubmit is called by the client prior to form submission, and postSubmit is called by the client after successful submission. My question is, why is there not a signature like this: def ajaxForm(body: NodeSeq, result: () = JsCmd) for which the specified result function will be called, and the JsCmd returned to the browser for evaluation after processing of the form contents on the server? Right now, I'm using the following to achieve this effect, but it seems really hacky: val (psId, psJs) = ajaxCall(JsRaw(dsl_text.value), text = After(20, SetHtml(results, parse(text ajaxForm( bind(plan, xhtml, dsl - SHtml.textarea(, s = (), id - dsl_text, rows - 40, cols - 120), submit - SHtml.submit(Parse, () = ()) ), psJs.cmd ) Here, JsCmd is actually doing the heavy lifting prior to form submission, with noop implementations for handling of the form elements. Seems really hacky. I feel like I've got to be missing something here, like there's got to be a better way to implement this such that the parsing of the textarea contents can be done by the closure passed to the SHtml.textarea call. How can I do this? Here's an idea I've been toying with for a while; it would be a somewhat significant change to Lift but I feel like there would be some benefits. Instead of SHtml.* having signatures like (String, () = Any, (String, String)*) = NodeSeq, imagine that there was a parameterized class (call it FormElement) that all of the SHtml methods returned, and then an implicit conversion from FormElement to NodeSeq. Might look something like this: trait FormElement[T] { def !: T def toNodeSeq: NodeSeq } An
[Lift] Fwd: Re: Review Request: Ajax change from () = Any to () = JsCmd
I hope it's okay that I'm forwarding this to the list. A suggestion, to allow all the alternatives in a type-safe and type-documenting way, would involve implicits. So you would have say sealed trait AjaxResponse case class JsCmdResponse(cmd: JsCmd) ... object AjaxReponse { implicit def apply(cmd: JsCmd): AjaxResponse = JsCmdResponse(cmd) ... } Alternatively, define the implicit separate from the apply method (e.g., in SHtml). Then you can either write AjaxResponse(myJsCmd), or import the implicits (if they're in SHtml you may not need a new import statement) and write it the old way. - From: Kris Nuttycombekris.nuttyco...@gmail.com To: heiko.seeber...@googlemail.com;alex.boisv...@gmail.com;naftoli...@gmail.com;feeder.of.the.be...@gmail.com;jorge.or...@gmail.com;atsuhiko.yaman...@gmail.com;marius.dan...@gmail.com;joni.free...@reaktor.fi;dchenbec...@gmail.com;indraj...@gmail.com;kris.nuttyco...@gmail.com;char...@munat.com Subject: Re: Review Request: Ajax change from () = Any to () = JsCmd Date: Jan 21, 2:23 PM --- This is an automatically generated e-mail. To reply, visit: http://reviewboard.liftweb.net/r/184/#review481 --- Since ajaxSubmit is brand-new, this makes sense to me. I was unaware that Lift explicitly attempted to match JsCmd, NodeSeq, JsCommands, and LiftResponse as you noted in your mail to the list. It would be helpful to add this to the documentation of the other methods that take functions returning Any; also, would it make sense to have these signatures return a common super-trait (not likely, because of NodeSeq) or else a standard sealed trait with concrete instances wrapping each one of those types? - Kris On 2010-01-21 14:08:12.907657, Marius Danciu wrote: --- This is an automatically generated e-mail. To reply, visit: http://reviewboard.liftweb.net/r/184/ --- (Updated 2010-01-21 14:08:12.907657) Review request for Derek Chen-Becker, David Pollak, Marius Danciu, Charles Munat, Heiko Seeberger, Joni Freeman, Atsuhiko Yamanaka, Jorge Ortiz, Naftoli Gugenheim, Kris Nuttycombe, Indrajit Raychaudhuri, and Alex Boisvert. Summary --- It's more consistent for ajax functions to return JsCmd This addresses bug 295. http://github.com/dpp/liftweb/issues#issue/295 Diffs - framework/lift-base/lift-webkit/src/main/scala/net/liftweb/http/SHtml.scala 82949d1 framework/lift-persistence/lift-mapper/src/main/scala/net/liftweb/mapper/MappedLong.scala 7655346 Diff: http://reviewboard.liftweb.net/r/184/diff Testing --- Thanks, Marius -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
Re: [Lift] Version of maven for lift
You want an sbaz package that will contain what exactly? - James Matlikjames.mat...@gmail.com wrote: What is Lift's recommended version of Maven? I am looking to create an sbaz package for easy download and install for maven for newcomers (myself included), and figure that having one that is compatible with lift would be of prime interest. Is the latest and greatest version compatible with 2.0? Regards, James -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en. -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
[Lift] Re: Snippet question
Hm, i saw a method with attrs, but it was private. guess i overlooked it. thanks. On 21 Jan., 22:46, Ross Mellgren dri...@gmail.com wrote: The signature of ajaxText is: def ajaxText(value : String, func : (String) = JsCmd, attrs : (String, String)*): Elem def ajaxText(value : String, jsFunc : Call, func : (String) = JsCmd, attrs : (String, String)*): Elem The attrs vararg is for this purpose, just pass in additional attributes you want there. Note that you should not pass the name attribute, as that is generated by Lift. -Ross On Jan 21, 2010, at 4:43 PM, Franz Bettag wrote: One last question, is there any way to give an ajaxText some kind of style/class/id attribute? I looked at the source but it was really hard to get the hang of it. best regards. On 21 Jan., 02:05, Franz Bettag fr...@bett.ag wrote: Ah, i was already wondering if that was a typo or what it does =) thank you very much. The project is coming along nicely. You really notice the performance difference between our old one (ruby based) and scala. Lift delivery the list of all subnets in 2.6 seconds. Merb needed almost 8 seconds for the same request. I must admit that the merb project used amqp to collect remote data and i use akka now, but the performance boost is kinda incredible. Also on the merb-implementation, i had most of the rendering done by JS since rendering everything with ruby slowed down everything for another few seconds, on lift it works even faster on the client side since it already does the output-generation in a nip of a second. Kudos! On 21 Jan., 01:24, Ross Mellgren dri...@gmail.com wrote: Use to combine JsCmd. e.g. JsShowId(ajax-spinner) SetHtml(subnet-1234, spanmy awesome subnet contents/span) -Ross On Jan 20, 2010, at 7:16 PM, Franz Bettag wrote: Works like a charm now! Thanks! One last question tho, is it possible to get a client-Side-callback for net.liftweb.http.SHtml.a? I want to start showing a specific ajax spinner (have more than one on the page) upon pressing a special link. I don't get how i might chain them together. :) On 20 Jan., 22:15, Franz Bettag fr...@bett.ag wrote: Of course i forgot to paste the snippet..http://pastie.org/787160 On 20 Jan., 21:44, Ross Mellgren dri...@gmail.com wrote: Scala can't figure out what type of parameter you mean, so you need to annotate it -- expand - (fooXhtml: NodeSeq) = {... } Or use a separately named function with a type signature, e.g. def doTheStuff(ns: NodeSeq): NodeSeq) = { Log.error(ns.toStrnig); span / } bind(..., expand - doTheStuff _) -Ross On Jan 20, 2010, at 3:41 PM, Franz Bettag wrote: expand - (fooXhtml) = { Log.error(fooXhtml.toString); span/ }, error: not a legal formal parameter (pointing at the = ) On 20 Jan., 21:32, greekscala hellectro...@gmail.com wrote: Hello, yes a function that takes NodeSeq parameter and returns a NodeSeq :) foo - (ns) = {function body} or foo - theCalledFunction best regards On 20 Jan., 21:26, Franz Bettag fr...@bett.ag wrote: How would that look like? foo = nodeSeqMethod _ ? On 20 Jan., 21:21, Naftoli Gugenheim naftoli...@gmail.com wrote: Meaning to the right of the - arrow. - Franz Bettagfr...@bett.ag wrote: Ah figured it out. Played long enough around to get the right way: () = {expand(trafficReply.subnet)} Another question though, would it be possible to use IPs:expandspantraffic:sometag//span/IPs:expand and pass the given NodeSeq over the bind into a function? On 20 Jan., 19:08, Franz Bettag fr...@bett.ag wrote: Sorry if i am asking a lot of questions lately, but i am trying to get this project of mine working so i can write about the specific problems i ran into and how they got done. def subnets(xhtml: NodeSeq): NodeSeq = { val content = IPnet.findAll(OrderBy(IPnet.name, Ascending)).map(ip = { /* Bind the xml */ bind(ip, xhtml, subnet - Text(ip.name.toString), action - SHtml.a(expand(ip.subnet) _, See all IPs) ) }).mkString XML.loadString(span%s/span.format(content)) } def expand(subnet: String): JsCmd = { Log.info(Requested subnet %s.format(subnet)) Alert(subnet %s was requested.format(subnet)) } The Problem is the action that gets binded. I don't get how i have to use SHtml.a to pass a value to the called function. Any hints? Thank you very much in advance -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to
Re: [Lift] Re: A better approach to ajax forms?
On Thu, Jan 21, 2010 at 2:43 PM, Marius marius.dan...@gmail.com wrote: On Jan 21, 11:15 pm, Kris Nuttycombe kris.nuttyco...@gmail.com wrote: On Thu, Jan 21, 2010 at 12:23 PM, Marius marius.dan...@gmail.com wrote: Instead of submit - SHtml.submit(Parse, () = ()) use: submit - SHtml.ajaxSubmit(Parse, () = ()) you can also send normal forms via ajax like: SHtml.submitAjaxForm(formId, () = { /// Do your stuff here. This function will be called after form field functions are executed. Noop }) Br's, Marius Thanks, Marius. I've just updated from M1 to the snapshot to get ajaxSubmit; however, it doesn't address my question as to why the function passed to AjaxSubmit doesn't return a JsCmd that can be used to refresh the page. The ajaxSubmit has the signature: def ajaxSubmit(value: String, func: () = Any, attrs: (String, String) *) returns an Any because Lift looks for the following: JsCmd, NodeSeq JsCommands LiftResponse I think I must be misunderstanding something - should I expect the following to work? var text: Option[String] = None ajaxForm( bind(plan, xhtml, dsl - textarea(, s = text = Some(s), id - dsl_text, rows - 40, cols - 120), submit - ajaxSubmit(Create Plan, () = SetHtml(results, buildPlan(text.get))) ) ) where there is div id=results/ in the rendered page? I don't seem to get the expected results back, though it's clear from logging that this is being processed correctly. Kris -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
Re: [Lift] Re: A better approach to ajax forms?
On Thu, Jan 21, 2010 at 4:36 PM, Kris Nuttycombe kris.nuttyco...@gmail.com wrote: On Thu, Jan 21, 2010 at 2:43 PM, Marius marius.dan...@gmail.com wrote: On Jan 21, 11:15 pm, Kris Nuttycombe kris.nuttyco...@gmail.com wrote: On Thu, Jan 21, 2010 at 12:23 PM, Marius marius.dan...@gmail.com wrote: Instead of submit - SHtml.submit(Parse, () = ()) use: submit - SHtml.ajaxSubmit(Parse, () = ()) you can also send normal forms via ajax like: SHtml.submitAjaxForm(formId, () = { /// Do your stuff here. This function will be called after form field functions are executed. Noop }) Br's, Marius Thanks, Marius. I've just updated from M1 to the snapshot to get ajaxSubmit; however, it doesn't address my question as to why the function passed to AjaxSubmit doesn't return a JsCmd that can be used to refresh the page. The ajaxSubmit has the signature: def ajaxSubmit(value: String, func: () = Any, attrs: (String, String) *) returns an Any because Lift looks for the following: JsCmd, NodeSeq JsCommands LiftResponse I think I must be misunderstanding something - should I expect the following to work? var text: Option[String] = None ajaxForm( bind(plan, xhtml, dsl - textarea(, s = text = Some(s), id - dsl_text, rows - 40, cols - 120), submit - ajaxSubmit(Create Plan, () = SetHtml(results, buildPlan(text.get))) ) ) where there is div id=results/ in the rendered page? I don't seem to get the expected results back, though it's clear from logging that this is being processed correctly. Kris A bit more, intriguing information: is SetHtml size-limited? It seems to work fine if what I'm passing back is just a URL or something, but if I pass back a 1.5k error message, the message never seems to appear. Kris -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
Re: [Lift] Re: A better approach to ajax forms?
On Thu, Jan 21, 2010 at 4:04 PM, Kris Nuttycombe kris.nuttyco...@gmail.comwrote: On Thu, Jan 21, 2010 at 4:36 PM, Kris Nuttycombe kris.nuttyco...@gmail.com wrote: On Thu, Jan 21, 2010 at 2:43 PM, Marius marius.dan...@gmail.com wrote: On Jan 21, 11:15 pm, Kris Nuttycombe kris.nuttyco...@gmail.com wrote: On Thu, Jan 21, 2010 at 12:23 PM, Marius marius.dan...@gmail.com wrote: Instead of submit - SHtml.submit(Parse, () = ()) use: submit - SHtml.ajaxSubmit(Parse, () = ()) you can also send normal forms via ajax like: SHtml.submitAjaxForm(formId, () = { /// Do your stuff here. This function will be called after form field functions are executed. Noop }) Br's, Marius Thanks, Marius. I've just updated from M1 to the snapshot to get ajaxSubmit; however, it doesn't address my question as to why the function passed to AjaxSubmit doesn't return a JsCmd that can be used to refresh the page. The ajaxSubmit has the signature: def ajaxSubmit(value: String, func: () = Any, attrs: (String, String) *) returns an Any because Lift looks for the following: JsCmd, NodeSeq JsCommands LiftResponse I think I must be misunderstanding something - should I expect the following to work? var text: Option[String] = None ajaxForm( bind(plan, xhtml, dsl - textarea(, s = text = Some(s), id - dsl_text, rows - 40, cols - 120), submit - ajaxSubmit(Create Plan, () = SetHtml(results, buildPlan(text.get))) ) ) where there is div id=results/ in the rendered page? I don't seem to get the expected results back, though it's clear from logging that this is being processed correctly. Kris A bit more, intriguing information: is SetHtml size-limited? It seems to work fine if what I'm passing back is just a URL or something, but if I pass back a 1.5k error message, the message never seems to appear. It's not size limited AFAIK. Some browsers may have a limit on String length or the ability to parse super-long JavaScript, but you're probably looking at 16M (24 bits). Kris -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=en. -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Surf the harmonics -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
Re: [Lift] Re: A better approach to ajax forms?
Okay, I think I may have found a bug. My returned content contains unescaped braces. In one failure case (this is parsing a DSL) I was testing a parse of a missing end brace - and part of the error message is the original text passed in (with mismatched braces). Figured it out by passing in content with a superfluous end brace - that error returns fine. :) Thought I was going nuts. Kris On Thu, Jan 21, 2010 at 5:08 PM, David Pollak feeder.of.the.be...@gmail.com wrote: On Thu, Jan 21, 2010 at 4:04 PM, Kris Nuttycombe kris.nuttyco...@gmail.com wrote: On Thu, Jan 21, 2010 at 4:36 PM, Kris Nuttycombe kris.nuttyco...@gmail.com wrote: On Thu, Jan 21, 2010 at 2:43 PM, Marius marius.dan...@gmail.com wrote: On Jan 21, 11:15 pm, Kris Nuttycombe kris.nuttyco...@gmail.com wrote: On Thu, Jan 21, 2010 at 12:23 PM, Marius marius.dan...@gmail.com wrote: Instead of submit - SHtml.submit(Parse, () = ()) use: submit - SHtml.ajaxSubmit(Parse, () = ()) you can also send normal forms via ajax like: SHtml.submitAjaxForm(formId, () = { /// Do your stuff here. This function will be called after form field functions are executed. Noop }) Br's, Marius Thanks, Marius. I've just updated from M1 to the snapshot to get ajaxSubmit; however, it doesn't address my question as to why the function passed to AjaxSubmit doesn't return a JsCmd that can be used to refresh the page. The ajaxSubmit has the signature: def ajaxSubmit(value: String, func: () = Any, attrs: (String, String) *) returns an Any because Lift looks for the following: JsCmd, NodeSeq JsCommands LiftResponse I think I must be misunderstanding something - should I expect the following to work? var text: Option[String] = None ajaxForm( bind(plan, xhtml, dsl - textarea(, s = text = Some(s), id - dsl_text, rows - 40, cols - 120), submit - ajaxSubmit(Create Plan, () = SetHtml(results, buildPlan(text.get))) ) ) where there is div id=results/ in the rendered page? I don't seem to get the expected results back, though it's clear from logging that this is being processed correctly. Kris A bit more, intriguing information: is SetHtml size-limited? It seems to work fine if what I'm passing back is just a URL or something, but if I pass back a 1.5k error message, the message never seems to appear. It's not size limited AFAIK. Some browsers may have a limit on String length or the ability to parse super-long JavaScript, but you're probably looking at 16M (24 bits). Kris -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en. -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Surf the harmonics -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en. -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
[Lift] web site critique
http://liftweb.net/download.html needs to tell me what (tf :-) to do next if i /do/ have mvn installed already. -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
[Lift] intro mvn critique
hi, i think there should be a much shorter mvn command to get started. i do not know maven, but would it not be possible to wrap up all of the long-winded jiggery-pokery (below) into a shorter thing that expanded / downloaded something that ran that command? it is just not good user experience for first time user who wants to dip their toe into see this, imho. mvn archetype:generate -U \ -DarchetypeGroupId=net.liftweb \ -DarchetypeArtifactId=lift-archetype-blank \ -DarchetypeVersion=1.0 \ -DremoteRepositories=http://scala-tools.org/repo-releases \ -DgroupId=demo.helloworld \ -DartifactId=helloworld \ -Dversion=1.0-SNAPSHOT -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
Re: [Lift] web site critique
On Thu, Jan 21, 2010 at 4:29 PM, Raoul Duke rao...@gmail.com wrote: http://liftweb.net/download.html needs to tell me what (tf :-) to do next if i /do/ have mvn installed already. http://liftweb.net/docs/getting_started.html -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=en. -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Surf the harmonics -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
Re: [Lift] intro mvn critique
On Thu, Jan 21, 2010 at 4:31 PM, Raoul Duke rao...@gmail.com wrote: hi, i think there should be a much shorter mvn command to get started. i do not know maven, but would it not be possible to wrap up all of the long-winded jiggery-pokery (below) into a shorter thing that expanded / downloaded something that ran that command? it is just not good user experience for first time user who wants to dip their toe into see this, imho. I wish, but no. I've written my own shell script. mvn archetype:generate -U \ -DarchetypeGroupId=net.liftweb \ -DarchetypeArtifactId=lift-archetype-blank \ -DarchetypeVersion=1.0 \ -DremoteRepositories=http://scala-tools.org/repo-releases \ -DgroupId=demo.helloworld \ -DartifactId=helloworld \ -Dversion=1.0-SNAPSHOT -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=en. -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Surf the harmonics -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
Re: [Lift] web site critique
hi, On Thu, Jan 21, 2010 at 4:32 PM, David Pollak feeder.of.the.be...@gmail.com wrote: On Thu, Jan 21, 2010 at 4:29 PM, Raoul Duke rao...@gmail.com wrote: http://liftweb.net/download.html needs to tell me what (tf :-) to do next if i /do/ have mvn installed already. http://liftweb.net/docs/getting_started.html i sincerely believe this response hilights the problem: you see what you know is already there, and fail to think like a total outsider coming to use the site. the link should be in the 'if you already have mvn installed' text in the body of the page as well as just at the top in the 'menu'. $0.02. -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
Re: [Lift] intro mvn critique
I wish, but no. I've written my own shell script. ugh. could the html verison perhaps be improved to not have extra blank lines which prevent me from successfully copy and pasting it into my shell? :-) http://liftweb.net/docs/getting_started/mod_master.html#x1-40001.2 sincerely. -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
Re: [Lift] web site critique
The site is not perfect, we know that... we are trying to work on it but progress is slow for a variety of reasons. On 22 Jan 2010, at 00:34, Raoul Duke wrote: hi, On Thu, Jan 21, 2010 at 4:32 PM, David Pollak feeder.of.the.be...@gmail.com wrote: On Thu, Jan 21, 2010 at 4:29 PM, Raoul Duke rao...@gmail.com wrote: http://liftweb.net/download.html needs to tell me what (tf :-) to do next if i /do/ have mvn installed already. http://liftweb.net/docs/getting_started.html i sincerely believe this response hilights the problem: you see what you know is already there, and fail to think like a total outsider coming to use the site. the link should be in the 'if you already have mvn installed' text in the body of the page as well as just at the top in the 'menu'. $0.02. -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en. -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
[Lift] buildr?
whatever came of buildr for lift? i haven't stumbled across the answer googling yet, but i'm still checking... thanks. -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
Re: [Lift] buildr?
On Thu, Jan 21, 2010 at 4:58 PM, Raoul Duke rao...@gmail.com wrote: whatever came of buildr for lift? i haven't stumbled across the answer googling yet, but i'm still checking... We're not going to support Buildr for Lift. Adding Ruby into the mix is a non-starter from my perspective. There is increasing sbt support for Lift-based projects. thanks. -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=en. -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Surf the harmonics -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
Re: [Lift] buildr?
hi, whatever came of buildr for lift? i haven't stumbled across the answer googling yet, but i'm still checking... We're not going to support Buildr for Lift. Adding Ruby into the mix is a non-starter from my perspective. There is increasing sbt support for Lift-based projects. thanks for the info. i will go read up on sbt now! [i saw your older response about disliking the ruby runtime -- i was wondering if anybody else had done a buildr branch nevertheless :-) e.g. http://github.com/aboisvert/liftweb# (and i wonder if jruby mitigates your ruby runtime concerns at all).] sincerely. -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
Re: [Lift] buildr?
On Thu, Jan 21, 2010 at 5:03 PM, Raoul Duke rao...@gmail.com wrote: hi, whatever came of buildr for lift? i haven't stumbled across the answer googling yet, but i'm still checking... We're not going to support Buildr for Lift. Adding Ruby into the mix is a non-starter from my perspective. There is increasing sbt support for Lift-based projects. thanks for the info. i will go read up on sbt now! [i saw your older response about disliking the ruby runtime -- i was wondering if anybody else had done a buildr branch nevertheless :-) e.g. http://github.com/aboisvert/liftweb# (and i wonder if jruby mitigates your ruby runtime concerns at all).] Jruby is yet another download, install, configuration. Making Lift as easy as possible to get started with and keep going with is the priority. Maven gives us this. Yes, the one line you have to copy/paste is a bear, but once you've typed that, things work remarkably well with Maven. Having to install Jruby, is yet another barrier, yet another thing to support, etc. At this point, we're official only supporting Lift with Maven. We've got limited resources and this is where we're putting them. Maven is mature, works well in most cases, and integrates with IDEs very effectively. I expect in 6-12 months, we'll deprecate Maven in favor of sbt, but not today. There may be other folks on the list that have other build environments that they use with Lift and I encourage them to share/help out. sincerely. -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=en. -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Surf the harmonics -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
Re: [Lift] buildr?
At this point, we're official only supporting Lift with Maven. We've got limited resources and this is where we're putting them. Maven is mature, works well in most cases, and integrates with IDEs very effectively. I expect in 6-12 months, we'll deprecate Maven in favor of sbt, but not today. There may be other folks on the list that have other build environments that they use with Lift and I encourage them to share/help out. yeah, i think you are reading into what i was asking since i never said / did not intend to imply that you ought to do anything about supporting non-maven builds. i was asking the list in general to learn about non-maven approaches. i am not trying to bonk the chip on your shoulder about maven or not maven :-), apologies for not being more clear about that to begin with. sincerely. -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
Re: [Lift] Re: [lift] Version of maven for lift
Sbt is on the plan too, as well as svnkit which is a command line svn client in Java. On Jan 21, 2010 4:30 PM, Channing Walton channingwal...@mac.com wrote: I use maven 2.2.1 without any problem. i prefer to use sbt these days which still makes use of mvn repositories. James Matlik wrote: What is Lift's recommended version of Maven? I am looking to create an ... -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=en. -- View this message in context: http://old.nabble.com/Version-of-maven-for-lift-tp27264662p27264918.html Sent from the liftweb mailing list archive at Nabble.com. -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=en. -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
Re: [Lift] Version of maven for lift
I will be creating a sbaz package containing a maven release. I realize that lift generally doesn't use the scala distribution (which comes with sbaz ), but it does seem a logical stepping stone for beginners and tinkerers. I just want to make things readily accessible. Since 2.2.1 works, I'll run with that. On Jan 21, 2010 6:03 PM, Naftoli Gugenheim naftoli...@gmail.com wrote: You want an sbaz package that will contain what exactly? - James Matlikjames.mat...@gmail.com wrote: What is Lift's recommended version of Maven? I am look... -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
Re: [Lift] buildr?
On Thu, Jan 21, 2010 at 5:17 PM, David Pollak feeder.of.the.be...@gmail.com wrote: On Thu, Jan 21, 2010 at 5:03 PM, Raoul Duke rao...@gmail.com wrote: hi, whatever came of buildr for lift? i haven't stumbled across the answer googling yet, but i'm still checking... We're not going to support Buildr for Lift. Adding Ruby into the mix is a non-starter from my perspective. There is increasing sbt support for Lift-based projects. thanks for the info. i will go read up on sbt now! [i saw your older response about disliking the ruby runtime -- i was wondering if anybody else had done a buildr branch nevertheless :-) e.g. http://github.com/aboisvert/liftweb# (and i wonder if jruby mitigates your ruby runtime concerns at all).] Jruby is yet another download, install, configuration. Making Lift as easy as possible to get started with and keep going with is the priority. Maven gives us this. Yes, the one line you have to copy/paste is a bear, but once you've typed that, things work remarkably well with Maven. Having to install Jruby, is yet another barrier, yet another thing to support, etc. disclaimer i'm not arguing for use of buildr with lift, just providing information /disclaimer buildr now has an all-in-one distribution (which uses jruby on the inside) and requires no more install/configuration steps than maven. granted, if you already use maven, it's an extra step. there's also an all-in-one-jar in the works which will make buildr even easier to install and use. this should be available soon after jruby 1.5.0 is out. i use buildr + lift on a regular basis and find it a pleasant alternative to maven. if other people want to use buildr with lift, i'm happy to share and help them out. cheers, alex -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
[Lift] Re: Memory behavior in Jetty with CometActor - 25MB of scala.xml.Text!
David: Thanks for having a look. Curious about that missing dependency - i guess it's in the pom.xml but not really used. Anyway, I'll digest your recommendations and have a go at it. The scenario I have running right now is one page open (and therefore its session) for a very long time. While that's not a terribly realistic scenario, it probably is an indicator of why it did run out of memory and lock up in the real deployment. Cheers, Mark ps - did fix the project in drop.io. I guess in reality the pom should make sure to point to a repository where all the dependencies exist, vs. just having installed locally. On Jan 21, 10:38 am, David Pollak feeder.of.the.be...@gmail.com wrote: On Wed, Jan 20, 2010 at 9:28 PM, mark chance mark.cha...@gmail.com wrote: I did post the project to drop.io -http://drop.io/memtest. The project does not build: Path to dependency: 1) com.peopledesigned:memtest:war:1.0-SNAPSHOT 2) org.jfree:jcommon:jar:1.0.16 Looking at your code, each of the functions created/passed as part of the SHtml.ajaxCall(), etc. calls are retained for the duration of the session. Lift garbage collects these references if there's not seen on a page for 10 minutes. However, if the GUIDs are created within the scope of a CometActor, the function is retained until the CometActor is released (in your case, for the length of the session). There are a couple of ways to deal with this: - Create a single SHtml.ajaxCall instance as part of the CometActor (rather than on each partialUpdate). - Use the CometActor's built-in JSON handler to send a message from the browser to the server. See CometActor.handleJson() The latter is the best bet for handling rich interactions with the CometActor from the client without creating lots and lots of functions. -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
[Lift] Re: How to use prepareStatement to select *** from DB (two db vender)?
Thanks guys very very much! I'm using the Windows XP, I reset the height buffer for the CMD now, and can see the full error message now. The code can work fine now ( it's so strange that I run this code on the another computer , and it's all OK... ) Maybe I need to delete all the target files. :) Cheers, Neil On Jan 22, 3:09 am, Naftoli Gugenheim naftoli...@gmail.com wrote: If you are using Windows and CMD.EXE does not hold enough lines to view the error, click the control menu of the CMD window and click Properties, then on the Layout tab you set the height of the screen buffer size. - Neil.Lvanim...@gmail.com wrote: Here is the lastest code now, g...@github.com:anim510/two_db_demo.git start server and visit:http://localhost:8080/and get this error, In the cmd I can't see all the error message, here is the all the message on the cmd screen. at net.liftweb.http.LiftSession$$anonfun $processSurroundAndInclude$1$$an onfun$apply$72.apply(LiftSession.scala:1041) at net.liftweb.http.LiftSession$$anonfun $processSurroundAndInclude$1$$an onfun$apply$72.apply(LiftSession.scala:1041) at net.liftweb.http.LiftSession.net$liftweb$http$LiftSession$ $processOrD efer(LiftSession.scala:1026) at net.liftweb.http.LiftSession$$anonfun $processSurroundAndInclude$1.app ly(LiftSession.scala:1040) at net.liftweb.http.LiftSession$$anonfun $processSurroundAndInclude$1.app ly(LiftSession.scala:1034) at scala.Seq$class.flatMap(Seq.scala:294) at scala.xml.NodeSeq.flatMap(NodeSeq.scala:34) at net.liftweb.http.LiftSession.processSurroundAndInclude (LiftSession.sc ala:1033) at net.liftweb.http.LiftSession$$anonfun $processSurroundAndInclude$1.app ly(LiftSession.scala:1054) at net.liftweb.http.LiftSession$$anonfun $processSurroundAndInclude$1.app ly(LiftSession.scala:1034) at scala.Seq$class.flatMap(Seq.scala:294) at scala.xml.NodeSeq.flatMap(NodeSeq.scala:34) at net.liftweb.http.LiftSession.processSurroundAndInclude (LiftSession.sc ala:1033) at net.liftweb.builtin.snippet.Surround$$anonfun$render$1$ $anonfun$apply $2.apply(Surround.scala:37) at net.liftweb.builtin.snippet.Surround$$anonfun$render$1$ $anonfun$apply $2.apply(Surround.scala:34) at net.liftweb.common.Full.map(Box.scala:330) at net.liftweb.builtin.snippet.Surround$$anonfun$render$1.apply (Surround .scala:34) at net.liftweb.builtin.snippet.Surround$$anonfun$render$1.apply (Surround .scala:33) at net.liftweb.common.Full.flatMap(Box.scala:332) at net.liftweb.builtin.snippet.Surround$.render(Surround.scala: 33) at net.liftweb.builtin.snippet.Surround$$anonfun$dispatch$1$ $anonfun$app ly$1.apply(Surround.scala:29) at net.liftweb.builtin.snippet.Surround$$anonfun$dispatch$1$ $anonfun$app ly$1.apply(Surround.scala:29) at net.liftweb.http.LiftSession$$anonfun$18$$anonfun$apply$58$ $anonfun$a pply$61$$anonfun$apply$63.apply(LiftSession.scala:846) at net.liftweb.http.LiftSession$$anonfun$18$$anonfun$apply$58$ $anonfun$a pply$61$$anonfun$apply$63.apply(LiftSession.scala:830) at net.liftweb.common.EmptyBox.openOr(Box.scala:372) at net.liftweb.http.LiftSession$$anonfun$18$$anonfun$apply$58$ $anonfun$a pply$61.apply(LiftSession.scala:830) at net.liftweb.http.LiftSession$$anonfun$18$$anonfun$apply$58$ $anonfun$a pply$61.apply(LiftSession.scala:830) at net.liftweb.common.EmptyBox.openOr(Box.scala:372) at net.liftweb.http.LiftSession$$anonfun$18$$anonfun$apply $58.apply(Lift Session.scala:829) at net.liftweb.http.LiftSession$$anonfun$18$$anonfun$apply $58.apply(Lift Session.scala:829) at net.liftweb.http.S$.doSnippet(S.scala:1677) at net.liftweb.http.LiftSession$$anonfun$18.apply (LiftSession.scala:827) at net.liftweb.http.LiftSession$$anonfun$18.apply (LiftSession.scala:826) at net.liftweb.common.Full.map(Box.scala:330) at net.liftweb.http.LiftSession.net$liftweb$http$LiftSession$ $processSni ppet(LiftSession.scala:826) at net.liftweb.http.LiftSession$$anonfun $_defaultLiftTagProcessing$1.app ly(LiftSession.scala:942) at net.liftweb.http.LiftSession$$anonfun $_defaultLiftTagProcessing$1.app ly(LiftSession.scala:930) at net.liftweb.util.NamedPF.apply(NamedPartialFunction.scala: 33) at net.liftweb.util.NamedPF$.apply(NamedPartialFunction.scala: 79) at net.liftweb.http.LiftSession$$anonfun $processSurroundAndInclude$1$$an onfun$apply$72$$anonfun$apply$73$$anonfun$apply$74$$anonfun$apply $75.apply(LiftS ession.scala:1044) at net.liftweb.http.LiftSession$$anonfun $processSurroundAndInclude$1$$an
Re: [Lift] Re: How to use prepareStatement to select *** from DB (two db vender)?
'mvn clean' deletes them for you. - Neil.Lvanim...@gmail.com wrote: Thanks guys very very much! I'm using the Windows XP, I reset the height buffer for the CMD now, and can see the full error message now. The code can work fine now ( it's so strange that I run this code on the another computer , and it's all OK... ) Maybe I need to delete all the target files. :) Cheers, Neil On Jan 22, 3:09 am, Naftoli Gugenheim naftoli...@gmail.com wrote: If you are using Windows and CMD.EXE does not hold enough lines to view the error, click the control menu of the CMD window and click Properties, then on the Layout tab you set the height of the screen buffer size. - Neil.Lvanim...@gmail.com wrote: Here is the lastest code now, g...@github.com:anim510/two_db_demo.git start server and visit:http://localhost:8080/and get this error, In the cmd I can't see all the error message, here is the all the message on the cmd screen. at net.liftweb.http.LiftSession$$anonfun $processSurroundAndInclude$1$$an onfun$apply$72.apply(LiftSession.scala:1041) at net.liftweb.http.LiftSession$$anonfun $processSurroundAndInclude$1$$an onfun$apply$72.apply(LiftSession.scala:1041) at net.liftweb.http.LiftSession.net$liftweb$http$LiftSession$ $processOrD efer(LiftSession.scala:1026) at net.liftweb.http.LiftSession$$anonfun $processSurroundAndInclude$1.app ly(LiftSession.scala:1040) at net.liftweb.http.LiftSession$$anonfun $processSurroundAndInclude$1.app ly(LiftSession.scala:1034) at scala.Seq$class.flatMap(Seq.scala:294) at scala.xml.NodeSeq.flatMap(NodeSeq.scala:34) at net.liftweb.http.LiftSession.processSurroundAndInclude (LiftSession.sc ala:1033) at net.liftweb.http.LiftSession$$anonfun $processSurroundAndInclude$1.app ly(LiftSession.scala:1054) at net.liftweb.http.LiftSession$$anonfun $processSurroundAndInclude$1.app ly(LiftSession.scala:1034) at scala.Seq$class.flatMap(Seq.scala:294) at scala.xml.NodeSeq.flatMap(NodeSeq.scala:34) at net.liftweb.http.LiftSession.processSurroundAndInclude (LiftSession.sc ala:1033) at net.liftweb.builtin.snippet.Surround$$anonfun$render$1$ $anonfun$apply $2.apply(Surround.scala:37) at net.liftweb.builtin.snippet.Surround$$anonfun$render$1$ $anonfun$apply $2.apply(Surround.scala:34) at net.liftweb.common.Full.map(Box.scala:330) at net.liftweb.builtin.snippet.Surround$$anonfun$render$1.apply (Surround .scala:34) at net.liftweb.builtin.snippet.Surround$$anonfun$render$1.apply (Surround .scala:33) at net.liftweb.common.Full.flatMap(Box.scala:332) at net.liftweb.builtin.snippet.Surround$.render(Surround.scala: 33) at net.liftweb.builtin.snippet.Surround$$anonfun$dispatch$1$ $anonfun$app ly$1.apply(Surround.scala:29) at net.liftweb.builtin.snippet.Surround$$anonfun$dispatch$1$ $anonfun$app ly$1.apply(Surround.scala:29) at net.liftweb.http.LiftSession$$anonfun$18$$anonfun$apply$58$ $anonfun$a pply$61$$anonfun$apply$63.apply(LiftSession.scala:846) at net.liftweb.http.LiftSession$$anonfun$18$$anonfun$apply$58$ $anonfun$a pply$61$$anonfun$apply$63.apply(LiftSession.scala:830) at net.liftweb.common.EmptyBox.openOr(Box.scala:372) at net.liftweb.http.LiftSession$$anonfun$18$$anonfun$apply$58$ $anonfun$a pply$61.apply(LiftSession.scala:830) at net.liftweb.http.LiftSession$$anonfun$18$$anonfun$apply$58$ $anonfun$a pply$61.apply(LiftSession.scala:830) at net.liftweb.common.EmptyBox.openOr(Box.scala:372) at net.liftweb.http.LiftSession$$anonfun$18$$anonfun$apply $58.apply(Lift Session.scala:829) at net.liftweb.http.LiftSession$$anonfun$18$$anonfun$apply $58.apply(Lift Session.scala:829) at net.liftweb.http.S$.doSnippet(S.scala:1677) at net.liftweb.http.LiftSession$$anonfun$18.apply (LiftSession.scala:827) at net.liftweb.http.LiftSession$$anonfun$18.apply (LiftSession.scala:826) at net.liftweb.common.Full.map(Box.scala:330) at net.liftweb.http.LiftSession.net$liftweb$http$LiftSession$ $processSni ppet(LiftSession.scala:826) at net.liftweb.http.LiftSession$$anonfun $_defaultLiftTagProcessing$1.app ly(LiftSession.scala:942) at net.liftweb.http.LiftSession$$anonfun $_defaultLiftTagProcessing$1.app ly(LiftSession.scala:930) at net.liftweb.util.NamedPF.apply(NamedPartialFunction.scala: 33) at net.liftweb.util.NamedPF$.apply(NamedPartialFunction.scala: 79) at net.liftweb.http.LiftSession$$anonfun $processSurroundAndInclude$1$$an onfun$apply$72$$anonfun$apply$73$$anonfun$apply$74$$anonfun$apply $75.apply(LiftS ession.scala:1044) at
[Lift] Re: How to use prepareStatement to select *** from DB (two db vender)?
On Jan 22, 10:06 am, Naftoli Gugenheim naftoli...@gmail.com wrote: 'mvn clean' deletes them for you. - Got it, Thank you very much! Cheers, Neil -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
Re: [Lift] Re: Simple Ajax call to server side function
On Mon, Jan 18, 2010 at 10:31 AM, Felipe Rodrigues felipero.maill...@gmail.com wrote: That's a little better.. thanks Originally, the function returned Any... and this led to problems (people returning HTML, Strings, etc.) It turns out that 95% of the time, you want to do something to tell the user that the server did something (unless the function sends a message to a CometActor), so using the type-system to make sure Ajax functions returned JsCmds was the right answer. greekscala wrote: Hello, know what you mean. You can use JsCmds._Noop to return nohting as JsCmd. best regards On 18 Jan., 17:25, Felipe Rodrigues felipero.maill...@gmail.com wrote: Here is how I made it, but seems ugly: SHtml.a(() = {serverSideFunction(t.text); Call(void, Num(0)).cmd}, t) It is awkward having to add a JsCmd even when I don't need it. Felipe Naftoli Gugenheim wrote: Never mind my question; I hadn't paid attention to the subject. - Felipe Rodriguesfelipero.maill...@gmail.com wrote: Hi all, I want to create a link which when clicked calls a server side function. No need for JavaScript callback. I tried with no success: SHtml.a(() = {serverSideFunction(t.text)}, t) Any idea how can I accomplish that will be appreciated. Thanks, Felipe -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=en. -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Surf the harmonics -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
Re: [Lift] Mindless work...
I have time to do the mindless work of doing the port tonight (my brain will explode if it has to think, but mindless is okay). Sorry for the delay, but my night already started when you were having lunch ;-) - Heiko -- how far along is the stuff in issue 292? Is this code on the irc_issue_292 branch? Can I work on this branch tonight? Good question: Indrajit told me to relax, because he was already working on that. Let's ask him! David (who is very serious about making Lift on Scala 2.8 very successful) Very good! Heiko Work: weiglewilczek.com Blog: heikoseeberger.name Follow me: twitter.com/hseeberger OSGi on Scala: scalamodules.org Lift, the simply functional web framework: liftweb.net -- You received this message because you are subscribed to the Google Groups Lift group. To post to this group, send email to lift...@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.