[Lift] Re: Milestone 5 now available!

2009-09-08 Thread Randinn

I know it's been said, but it's never said enough. All of you are
doing a great job, we appreciate it and thank you for all the work you
do to make it easier to code for the rest of us.

On Sep 9, 2:57 pm, "Charles F. Munat"  wrote:
> The Lift team proudly announces Milestone 5! Some text here that I
> forgot to copy and paste.
>
> Go get it!
>
> Chas. Munat
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Milestone 5 now available!

2009-09-08 Thread Charles F. Munat

The Lift team proudly announces Milestone 5! Some text here that I 
forgot to copy and paste.

Go get it!

Chas. Munat

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: JsonHandler stops working

2009-09-08 Thread David Pollak
This is a bug that was introduced a few months ago and fixed last week.
 It'll be fixed in M5 and the fix is available on SNAPSHOT.

On Tue, Sep 8, 2009 at 9:04 PM, dave  wrote:

>
> Hi,
>
> I am new to lift so I hope this is not an ignorant question/problem.
> I am having a problem where my json handler stops working. I believe
> it is timing out independent of the session.
> If I have my browser open for a short while, the json functions stop
> working but the ajax functions keep working. I have tried to track the
> time and find more details but I have not found the exact timeout. I
> believe it might be the 10 minute default timeout. It appears that the
> json functions continue to work if they are periodically called.
> Refreshing the page does not help. The json functions work again if I
> delete the cookie (and thus, get a new session).
>
> This problem also occurs at http://demo.liftweb.net/json_more (This is
> the example I started with.)
> In the demo app the server interaction on the json_more page stops
> working but the server interaction from "AJAX Samples" still works.
>
> I have tried changing LiftRules.enableLiftGC but this did not fix the
> problem.
> I have also tried the JsonHandler both as and not as a SessionVar.
> I have looked at S.functionLifespan but I am not sure how a app can
> use this. It seems to mostly be used internally when manipulating the
> function list.
>
> Is there a way I prevent my json handler from being garbage collected
> or a way to "touch" it periodically so that it does not expire?
>
> I am using liftweb-1.1m4 and jetty 6.1.20.
>
> In the time I wrote this, I was able to reproduce the problem on
> demo.liftweb.net.
>
> Thanks,
> Dave
>
> >
>


-- 
Lift, the simply functional web framework http://liftweb.net
Beginning Scala http://www.apress.com/book/view/1430219890
Follow me: http://twitter.com/dpp
Git some: http://github.com/dpp

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] JsonHandler stops working

2009-09-08 Thread dave

Hi,

I am new to lift so I hope this is not an ignorant question/problem.
I am having a problem where my json handler stops working. I believe
it is timing out independent of the session.
If I have my browser open for a short while, the json functions stop
working but the ajax functions keep working. I have tried to track the
time and find more details but I have not found the exact timeout. I
believe it might be the 10 minute default timeout. It appears that the
json functions continue to work if they are periodically called.
Refreshing the page does not help. The json functions work again if I
delete the cookie (and thus, get a new session).

This problem also occurs at http://demo.liftweb.net/json_more (This is
the example I started with.)
In the demo app the server interaction on the json_more page stops
working but the server interaction from "AJAX Samples" still works.

I have tried changing LiftRules.enableLiftGC but this did not fix the
problem.
I have also tried the JsonHandler both as and not as a SessionVar.
I have looked at S.functionLifespan but I am not sure how a app can
use this. It seems to mostly be used internally when manipulating the
function list.

Is there a way I prevent my json handler from being garbage collected
or a way to "touch" it periodically so that it does not expire?

I am using liftweb-1.1m4 and jetty 6.1.20.

In the time I wrote this, I was able to reproduce the problem on
demo.liftweb.net.

Thanks,
Dave

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: Lift WebServices

2009-09-08 Thread David Pollak
On Tue, Sep 8, 2009 at 4:19 PM, abruzzo  wrote:

>
> Whoops! Should have looked there. That fixed it. Thanks again for the
> help.
>

Sure thing.


>
> On Sep 8, 4:44 pm, David Pollak  wrote:
> > You declared the LiftFilter twice in your web.xml file:
> >
> >   
> > LiftFilter
> > Lift Filter
> > The Filter that intercepts lift calls
> > net.liftweb.http.LiftFilter
> >   
> >
> > THis caused the filter to be loaded twice.
> >
> > Remove one of the filter declarations and you should be fine.
> >
> >
> >
> > On Tue, Sep 8, 2009 at 9:43 AM, abruzzo  wrote:
> >
> > > I'm trying to set up a simple web service using Lift v1.0. I've
> > > scoured
> > > across many examples but because of changes in the api's, none of them
> > > compile. I finally found an example of a dispatcher tha compiles but
> > > in the
> > > sample as in others the dispatcher is added in the boot method of the
> > > Boot
> > > class as follows:
> >
> > >LiftRules.dispatch.prepend(RestApi.dispatch)
> >
> > > This compiles fine however, upon startup I get the following stack:
> >
> > > ERROR - Failed to Boot
> > > java.lang.IllegalStateException: Cannot modify after boot.
> > >at
> net.liftweb.http.RulesSeq$class.safe_$qmark(LiftRules.scala:885)
> > >at net.liftweb.http.RulesSeq$class.prepend(LiftRules.scala:892)
> > >at
> net.liftweb.http.RulesSeq$$anon$3.prepend(LiftRules.scala:872)
> > >at net.liftweb.http.LiftFilter.preBoot(LiftServlet.scala:581)
> > >at net.liftweb.http.LiftFilter.bootLift(LiftServlet.scala:572)
> > >at net.liftweb.http.LiftFilter.init(LiftServlet.scala:548)
> > >at
> org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:
> > > 97)
> > >at org.mortbay.component.AbstractLifeCycle.start
> > > (AbstractLifeCycle.java:50)
> > >at
> > > org.mortbay.jetty.servlet.ServletHandler.initialize
> > > (ServletHandler.java:653)
> > >at
> org.mortbay.jetty.servlet.Context.startContext(Context.java:140)
> > >at
> > > org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:
> > > 1239)
> > >at
> > > org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:
> > > 517)
> > >at
> > > org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:
> > > 466)
> > >at
> > > org.mortbay.jetty.plugin.Jetty6PluginWebAppContext.doStart
> > > (Jetty6PluginWebAppContext.java:124)
> > >at org.mortbay.component.AbstractLifeCycle.start
> > > (AbstractLifeCycle.java:50)
> > >at
> > > org.mortbay.jetty.handler.HandlerCollection.doStart
> > > (HandlerCollection.java:152)
> > >at
> > > org.mortbay.jetty.handler.ContextHandlerCollection.doStart
> > > (ContextHandlerCollection.java:156)
> > >at org.mortbay.component.AbstractLifeCycle.start
> > > (AbstractLifeCycle.java:50)
> > >at
> > > org.mortbay.jetty.handler.HandlerCollection.doStart
> > > (HandlerCollection.java:152)
> > >at org.mortbay.component.AbstractLifeCycle.start
> > > (AbstractLifeCycle.java:50)
> > >at
> > > org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:
> > > 130)
> > >at org.mortbay.jetty.Server.doStart(Server.java:224)
> > >at org.mortbay.component.AbstractLifeCycle.start
> > > (AbstractLifeCycle.java:50)
> > >at
> > > org.mortbay.jetty.plugin.Jetty6PluginServer.start
> > > (Jetty6PluginServer.java:132)
> > >at
> > > org.mortbay.jetty.plugin.AbstractJettyMojo.startJetty
> > > (AbstractJettyMojo.java:441)
> > >at
> > > org.mortbay.jetty.plugin.AbstractJettyMojo.execute
> > > (AbstractJettyMojo.java:383)
> > >at
> > > org.mortbay.jetty.plugin.AbstractJettyRunMojo.execute
> > > (AbstractJettyRunMojo.java:210)
> > >at
> > > org.mortbay.jetty.plugin.Jetty6RunMojo.execute(Jetty6RunMojo.java:
> > > 184)
> > >at
> > > org.apache.maven.plugin.DefaultPluginManager.executeMojo
> > > (DefaultPluginManager.java:451)
> > >at
> > > org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals
> > > (DefaultLifecycleExecutor.java:558)
> > >at
> > >
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandaloneGoal
> > > (DefaultLifecycleExecutor.java:512)
> > >at
> > > org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal
> > > (DefaultLifecycleExecutor.java:482)
> > >at
> >
> > >
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures
> > > (DefaultLifecycleExecutor.java:330)
> > >at
> > > org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments
> > > (DefaultLifecycleExecutor.java:291)
> > >at
> > > org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute
> > > (DefaultLifecycleExecutor.java:142)
> > >at
> org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:336)
> > >at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:129)
> > >at org.apache.

[Lift] Re: configuring web application

2009-09-08 Thread Naftoli Gugenheim

On whatever command line you use to launch jetty.

-
Jack Widman wrote:

And (pardon the noobality of this question) Where do I put the
-Djetty.port=80?

On Tue, Sep 8, 2009 at 10:30 PM, Naftoli Gugenheim wrote:

> -Djetty.port=80 I think.
> Or set up a "front end" web server like nginx or apache that routes between
> 80 and 8080.
>
> -
> jack wrote:
>
>
> Simple, but appropriate, I think, question.
>
> I am using jetty on port 8080. How do configure my server so that when
> people just type in my domain name, they get the index.html of my
> application. Its been a few years since I did this.
>
>
> >
>

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] How do I hook up JS events to onsubmit on a lift-controlled form?

2009-09-08 Thread DMB

Hi, folks,

I'm moving one of my old ruby based apps over to Scala/Lift to learn
Lift better, and here's one thing I was not able to find how to do.

Some forms in the old app have onsubmit event on the  tag which
combines / pre-validates things in the form, puts the output into a
hidden field and wipes some of the fields prior to submitting.

I can't seem to find a way to hook up a JS event to a Lift form
defined like so:



If I add onsubmit event to this tag, it simply gets ignored. How do I
do this in Lift?

Also, Ruby on Rails conveniently appends an integer value at the end
of script and CSS urls, which comes in handy when you want to maximize
caching but don't want to risk serving the old scripts and stylesheets
to the users. Is there a corresponding mechanism for this in Lift?

Thank you.

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: Retrieving the URL anchor

2009-09-08 Thread David Pollak
On Tue, Sep 8, 2009 at 6:55 PM, Xavi Ramirez  wrote:

>
> Hello,
>
> I'm having trouble finding the URL anchor (e.g.
> www.foo.com/test.html#this-is-the-url-anchor) while performing a URL
> rewrite.  i looked through the HTTPRequest object, but I can't seem to
> find it any where.
>
> Any idea where it might be?
>
>
It's not passed as part of the request to the server.  The stuff after the
hash is a client-side construct.


> Thanks,
> Xavi
>
> >
>


-- 
Lift, the simply functional web framework http://liftweb.net
Beginning Scala http://www.apress.com/book/view/1430219890
Follow me: http://twitter.com/dpp
Git some: http://github.com/dpp

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: configuring web application

2009-09-08 Thread Naftoli Gugenheim

-Djetty.port=80 I think.
Or set up a "front end" web server like nginx or apache that routes between 80 
and 8080.

-
jack wrote:


Simple, but appropriate, I think, question.

I am using jetty on port 8080. How do configure my server so that when
people just type in my domain name, they get the index.html of my
application. Its been a few years since I did this.




--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] configuring web application

2009-09-08 Thread jack

Simple, but appropriate, I think, question.

I am using jetty on port 8080. How do configure my server so that when
people just type in my domain name, they get the index.html of my
application. Its been a few years since I did this.


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: Crazy idea for lift's mega proto user: admin panel.

2009-09-08 Thread g-man

Right -- not knowing personally as to core vs widget (that is up to
'management'), but I would also look to the web2py and django (even
Google app engine) frameworks for nice admin interface inspiration...

On Sep 7, 4:16 pm, DFectuoso  wrote:
> I was thinking about how wonderful it is to get a login/register/
> forgotPassword functionality with mega proto user and how it could
> become even better with a good tool for creating an admin section.
>
> I'm just adding the idea here so maybe if other people find value it
> could be considered for development(or probably it already is, i don't
> know).
>
> Adding an admin panel to mega proto user where the moderators/admins
> could change some options(like the way a user is validated, if gzip is
> enabled, etc) would be great for the end users of our apps, since it
> would be easier to change and maintain the site.
>
> Being a administrator at a Invision Power Board forum and having a
> couple of wordpress blogs, i see a lot of potential on this as a admin/
> dev tool! Listing some of the things that i can imagine in this panel
> are:
>
> -phpMyAdmin-type of DB admin(browse your data easily, remove/change/
> add stuff to it without having to create a CRUD for each thing)
> -execute queries
> -List the actor(and comet actors) with possibility to kill/reset them
> -Memory use analysis.
> -Statistics of use(hits, referrals, etc)
> -Options (any object/class/trait could have a val foo =
> adminPanel.option("category","optionName","description",defaultValue,
> otherValues[]) and be included in this place, of course the categories
> could create different menus.
> -User management(ban, authorize, give admin-rights).
> -Simple to-do list that all admins can edit
> -Log of errors/warnings/exceptions
> -Css editor
> -Easy-logo changer
> -File Manager(upload your images and stuff here)
> -String editor (you can change any default string from the
> megaprotouser forms and the index?)
>
> Also, a very polemic(and i think bad idea, but its common to see this
> in admin panels):
> ->Installable plug-ins for this panel
>
> I know this seems like one step away from being a full blown CMS,
> forum, blog, etc. But if its extensible while we are building an app,
> it will be very useful for the different moments of development and
> use.
>
> Of course i don't expect any of this to be done right now, i
> understand there are a couple of integrations and bigger things going
> on but i really wanted to brainstorm on this with you guys!
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Retrieving the URL anchor

2009-09-08 Thread Xavi Ramirez

Hello,

I'm having trouble finding the URL anchor (e.g.
www.foo.com/test.html#this-is-the-url-anchor) while performing a URL
rewrite.  i looked through the HTTPRequest object, but I can't seem to
find it any where.

Any idea where it might be?

Thanks,
Xavi

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: setting user-agent header

2009-09-08 Thread Jack Widman
Cool. Thanks. The useful things about Lift seem to never end.

On Tue, Sep 8, 2009 at 6:51 PM, Derek Chen-Becker wrote:

> S.setHeader can be used in Lift to set a response header.
>
> Derek
>
>
> On Tue, Sep 8, 2009 at 9:02 AM, jack  wrote:
>
>>
>> Has anyone used dispatch from databinder.net?  Its an http library in
>> Scala.
>> I do not know how to set the User-Agent header.
>>
>>
>
> >
>

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: Lift WebServices

2009-09-08 Thread abruzzo

Whoops! Should have looked there. That fixed it. Thanks again for the
help.

On Sep 8, 4:44 pm, David Pollak  wrote:
> You declared the LiftFilter twice in your web.xml file:
>
>   
>     LiftFilter
>     Lift Filter
>     The Filter that intercepts lift calls
>     net.liftweb.http.LiftFilter
>   
>
> THis caused the filter to be loaded twice.
>
> Remove one of the filter declarations and you should be fine.
>
>
>
> On Tue, Sep 8, 2009 at 9:43 AM, abruzzo  wrote:
>
> > I'm trying to set up a simple web service using Lift v1.0. I've
> > scoured
> > across many examples but because of changes in the api's, none of them
> > compile. I finally found an example of a dispatcher tha compiles but
> > in the
> > sample as in others the dispatcher is added in the boot method of the
> > Boot
> > class as follows:
>
> >        LiftRules.dispatch.prepend(RestApi.dispatch)
>
> > This compiles fine however, upon startup I get the following stack:
>
> > ERROR - Failed to Boot
> > java.lang.IllegalStateException: Cannot modify after boot.
> >        at net.liftweb.http.RulesSeq$class.safe_$qmark(LiftRules.scala:885)
> >        at net.liftweb.http.RulesSeq$class.prepend(LiftRules.scala:892)
> >        at net.liftweb.http.RulesSeq$$anon$3.prepend(LiftRules.scala:872)
> >        at net.liftweb.http.LiftFilter.preBoot(LiftServlet.scala:581)
> >        at net.liftweb.http.LiftFilter.bootLift(LiftServlet.scala:572)
> >        at net.liftweb.http.LiftFilter.init(LiftServlet.scala:548)
> >        at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:
> > 97)
> >        at org.mortbay.component.AbstractLifeCycle.start
> > (AbstractLifeCycle.java:50)
> >        at
> > org.mortbay.jetty.servlet.ServletHandler.initialize
> > (ServletHandler.java:653)
> >        at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)
> >        at
> > org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:
> > 1239)
> >        at
> > org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:
> > 517)
> >        at
> > org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:
> > 466)
> >        at
> > org.mortbay.jetty.plugin.Jetty6PluginWebAppContext.doStart
> > (Jetty6PluginWebAppContext.java:124)
> >        at org.mortbay.component.AbstractLifeCycle.start
> > (AbstractLifeCycle.java:50)
> >        at
> > org.mortbay.jetty.handler.HandlerCollection.doStart
> > (HandlerCollection.java:152)
> >        at
> > org.mortbay.jetty.handler.ContextHandlerCollection.doStart
> > (ContextHandlerCollection.java:156)
> >        at org.mortbay.component.AbstractLifeCycle.start
> > (AbstractLifeCycle.java:50)
> >        at
> > org.mortbay.jetty.handler.HandlerCollection.doStart
> > (HandlerCollection.java:152)
> >        at org.mortbay.component.AbstractLifeCycle.start
> > (AbstractLifeCycle.java:50)
> >        at
> > org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:
> > 130)
> >        at org.mortbay.jetty.Server.doStart(Server.java:224)
> >        at org.mortbay.component.AbstractLifeCycle.start
> > (AbstractLifeCycle.java:50)
> >        at
> > org.mortbay.jetty.plugin.Jetty6PluginServer.start
> > (Jetty6PluginServer.java:132)
> >        at
> > org.mortbay.jetty.plugin.AbstractJettyMojo.startJetty
> > (AbstractJettyMojo.java:441)
> >        at
> > org.mortbay.jetty.plugin.AbstractJettyMojo.execute
> > (AbstractJettyMojo.java:383)
> >        at
> > org.mortbay.jetty.plugin.AbstractJettyRunMojo.execute
> > (AbstractJettyRunMojo.java:210)
> >        at
> > org.mortbay.jetty.plugin.Jetty6RunMojo.execute(Jetty6RunMojo.java:
> > 184)
> >        at
> > org.apache.maven.plugin.DefaultPluginManager.executeMojo
> > (DefaultPluginManager.java:451)
> >        at
> > org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals
> > (DefaultLifecycleExecutor.java:558)
> >        at
> > org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandaloneGoal
> > (DefaultLifecycleExecutor.java:512)
> >        at
> > org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal
> > (DefaultLifecycleExecutor.java:482)
> >        at
>
> > org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures
> > (DefaultLifecycleExecutor.java:330)
> >        at
> > org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments
> > (DefaultLifecycleExecutor.java:291)
> >        at
> > org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute
> > (DefaultLifecycleExecutor.java:142)
> >        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:336)
> >        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:129)
> >        at org.apache.maven.cli.MavenCli.main(MavenCli.java:287)
> >        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> >        at
> > sun.reflect.NativeMethodAccessorImpl.invoke
> > (NativeMethodAccessorImpl.java:39)
> >        at
> > sun.reflect.DelegatingMethodAccessorImpl.invoke
> > (DelegatingMethodAccessorImpl.java:25)

[Lift] Re: setting user-agent header

2009-09-08 Thread Derek Chen-Becker
S.setHeader can be used in Lift to set a response header.

Derek

On Tue, Sep 8, 2009 at 9:02 AM, jack  wrote:

>
> Has anyone used dispatch from databinder.net?  Its an http library in
> Scala.
> I do not know how to set the User-Agent header.
> >
>

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: Mapper subclasses

2009-09-08 Thread rstradling

I am trying to do what is mentioned below but am struggling with the
object side of things for my particular case.  This all relates back
to trying to auto-generate some classes that I posted back a while ago
on.  I would love to generate 1 file that has the trait and the object
in it that I then inherit from in my sub-class and object sub-class in
another file.

Autogenerated.scala
trait FC[MapperType <: FC[MapperType]] extends Mapper[MapperType] {
   self: MapperType =>
   object today extends MappedLong(this)
}

trait FCObj extends FC[MapperType] with LongKeyedMetaMapper[FC
[MapperType]] {
  override def fieldOrder = List(today)
}

In UserClass.scala
class FC_Wrapper extends LongKeyedMapper[FC_Wrapper] with IdPK with FC
[Wrapper] {
   def getSingleton = FCObj_Wrapper
   // define methods
}

object FCObj_Wrapper extends FCObj {
  // define auxiliary functionality

}

I know that the FCObj and FCObj_Wrapper is not correct syntax wise.
But the basic idea is that I want to have my autogeneration generate
the boilerplate code for me in a separate file.  This boilerplate
would ideally include the class and object related stuff.  Then in a
file that won't be stomped upon the next time I run the generator I
inherit from these objects.  I hope this makes sense.

I admit to not totally understanding the templated/generic programming
that is happening.




On Sep 3, 1:33 pm, glenn  wrote:
> Isn't this really a matter of type casting, and asInstanceOf is just
> Scala's
> way of doing this. It's always best if you don't have to downcast your
> objects, but sometimes its unavoidable.
>
> Glenn...
>
> On Sep 3, 10:29 am, glenn  wrote:
>
> > I'm not sure of what the exact problem is. I created an Address trait
> > that
> > I couple with a number of mapper classes.
>
> > trait Address[OwnerType <: KeyedMapper[Long, OwnerType]]{
>
> >   def owner = this.asInstanceOf[OwnerType]
>
> > 
>
> > Where exactly does this construct break down?
>
> > Glenn...
>
> > On Sep 3, 7:55 am, Giuseppe Fogliazza  wrote:
>
> > > jon suggested to me the way to avoid both explicit type parameter and
> > > asinstance of:
> > > trait Timestamp[MapperType <: TimeStamp[MapperType]] extends Mapper
> > > [MapperType] {
> > >self:MapperType =>
> > > object xdatetime extends MappedDateTime(this)
>
> > >   // all sorts of utility functions for dealing with timestamps
>
> > > }
>
> > > Thanks jon I have improved model in my application with this approach.
>
> > > Giuseppe
>
> > > On 3 Set, 16:16, Giuseppe Fogliazza  wrote:
>
> > > > As an alternative to asInstanceOf you could use explicit type
> > > > parameter in MappedField creation:
> > > >self:MapperType =>
> > > > object xdatetime extends MappedDateTime[MapperType](this)
>
> > > > On 3 Set, 09:19, Giuseppe Fogliazza  wrote:
>
> > > > > Unfortunately you cannot escape from asInstanceOf . Forcing
> > > > >self:MapperType the type of "this" will be TimeStamp with MapperType
> > > > > violating the constraint for the type of the first parameter of
> > > > > MappedDateTime :T <: Mapper[T].
>
> > > > > Regards
> > > > > Giuseppe
>
> > > > > On 3 Set, 07:08, Naftoli Gugenheim  wrote:
>
> > > > > > So I guess you can't escape the asInstanceOf. Can you successfully 
> > > > > > give the trait aself-type of this: MapperType =>, or declare it to 
> > > > > > extend Mapper[MapperType], without running into problems elsewhere?
>
> > > > > > -
>
> > > > > > harryh wrote:
>
> > > > > > I've been handling this with traits, for example I have something 
> > > > > > like
> > > > > > so:
>
> > > > > > trait Timestamp[MapperType <: Mapper[MapperType]] {
> > > > > >   object xdatetime extends 
> > > > > > MappedDateTime[MapperType](this.asInstanceOf
> > > > > > [MapperType])
>
> > > > > >   // all sorts of utility functions for dealing with timestamps
>
> > > > > > }
>
> > > > > > Then I can do
>
> > > > > > class Foo extends LongKeyedMapper[Foo] with IdPK with 
> > > > > > Timestamp[Foo] {
> > > > > >   // additional fields that are Foo specific
>
> > > > > > }
>
> > > > > > I have quite a few traits similar to Timestamp at this point
> > > > > > corresponding to various fields that appear in lots of different
> > > > > > tables in my application.
>
> > > > > > -harryh

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: setting user-agent header with Databinder

2009-09-08 Thread Jack Widman
Sorry.  should have thought to tell everyone. I have been coding all day
with tunnel vision!
The <:< method adds a Map[String, String] of headers to the request object:
http://databinder.net/sxr/dispatch-http/0.5.2/main/Http.scala.html#10878

For user agent it would be something like
val req_with_agent = req <:< Map("User-Agent" -> "my user agent value")

On Tue, Sep 8, 2009 at 5:17 PM, Randinn  wrote:

>
> What was the answer now that you have attained it?
>
> On Sep 9, 3:02 am, Jack Widman  wrote:
> > You are right. I will fine tune my determine which is a good question to
> ask
> > mechanism :)
> >
> > On Tue, Sep 8, 2009 at 12:54 PM, Timothy Perrett  >wrote:
> >
> >
> >
> > > IMHO, you'd probably get better traction with such questions in a
> > > wider audience on the main scala-user list over at EPFL...
> >
> > > Cheers, Tim
> >
> > > On 8 Sep 2009, at 17:26, Jack Widman wrote:
> >
> > > > Right. I will try to keep to the topic :)
> >
> > > > I actually found him and he quickly answered me.
> >
> > > > On Tue, Sep 8, 2009 at 12:24 PM, David Pollak <
> > > feeder.of.the.be...@gmail.com
> > > > > wrote:
> > > > Jack,
> >
> > > > I'm not sure where N8han (the author of Databinder) hangs out, but
> > > > it's not on the Lift list.  :-(
> >
> > > > Sorry.
> >
> > > > David
> >
> > > > On Tue, Sep 8, 2009 at 8:58 AM, jack  wrote:
> >
> > > > Please forgive me for including so much code but I have an important
> > > > demo fast approaching and I'm kind of in a bind. I am using
> > > > Databinders Dispatch http library which is a wrapper around Javas
> > > > HttpClient library. I have included the Http class below. Does anyone
> > > > see how to set the user-agent header. Once again I apologize and
> would
> > > > be much obliged for any help.
> >
> > > > import collection.Map
> > > > import collection.immutable.{Map => IMap}
> > > > import util.DynamicVariable
> > > > import java.io.
> > > > {InputStream,OutputStream,BufferedInputStream,BufferedOutputStream}
> > > > import java.net.URI
> > > > import java.util.zip.GZIPInputStream
> >
> > > > import org.apache.http._
> > > > import org.apache.http.client._
> > > > import org.apache.http.impl.client.{DefaultHttpClient,
> > > > BasicCredentialsProvider}
> > > > import org.apache.http.client.methods._
> > > > import org.apache.http.client.entity.UrlEncodedFormEntity
> > > > import org.apache.http.client.utils.URLEncodedUtils
> >
> > > > import org.apache.http.entity.StringEntity
> > > > import org.apache.http.message.BasicNameValuePair
> > > > import org.apache.http.protocol.HTTP.UTF_8
> > > > import org.apache.http.params.{HttpProtocolParams, BasicHttpParams}
> > > > import org.apache.http.util.EntityUtils
> > > > import org.apache.http.auth.{AuthScope, UsernamePasswordCredentials,
> > > > Credentials}
> >
> > > > case class StatusCode(code: Int, contents:String)
> > > >  extends Exception("Exceptional resoponse code: " + code + "\n" +
> > > > contents)
> >
> > > > /** Http access point. Standard instances to be used by a single
> > > > thread. */
> > > > class Http {
> > > >  val credentials = new DynamicVariable[Option[(AuthScope,
> > > > Credentials)]](None)
> > > >  val client = new ConfiguredHttpClient
> >
> > > >  def credentialsProvider = new BasicCredentialsProvider {
> > > >override def getCredentials(scope: AuthScope) = null
> > > >  }
> >
> > > > /**  /** Info Logger for this instance, default returns Connfiggy if
> > > > on classpath else console logger. */
> > > >  lazy val log: Logger = try {
> > > >new Logger {
> > > >  val delegate = net.lag.logging.Logger.get
> > > >  def info(msg: String, items: Any*) { delegate.info(msg, items:
> > > > _*) }
> > > >}
> > > >  } catch {
> > > >case e: NoClassDefFoundError => new Logger {
> > > >  def info(msg: String, items: Any*) {
> > > >println("INF: [console logger] dispatch: " + msg.format(items:
> > > > _*))
> > > >  }
> > > >}
> > > >  }
> > > >  **/
> > > >  /** Execute method for the given host, with logging. */
> > > >  def execute(host: HttpHost, req: HttpUriRequest) = {
> > > >//log.info("%s %s%s", req.getMethod, host, req.getURI)
> > > >client.execute(host, req)
> > > >  }
> > > >  /** Execute for given optional parametrs, with logging. Creates
> > > > local scope for credentials. */
> > > >  val execute: (Option[HttpHost], Option[Credentials], HttpUriRequest)
> > > > => HttpResponse = {
> > > >case (Some(host), Some(creds), req) =>
> > > >  client.credentials.withValue(Some((new AuthScope
> > > > (host.getHostName, host.getPort), creds)))(execute(host, req))
> > > >case (None, Some(creds), _) => error("Credentials specified
> > > > without explicit host")
> > > >case (Some(host), _, req) => execute(host, req)
> > > >case (_, _, req) =>
> > > >  //log.info("%s %s", req.getMethod, req.getURI)
> > > >  client.execute(req)
> > > >  }
> > > >  /** Execute full request-response handler. */
> > > >  def x[T](hand: Handler[T]

[Lift] Re: setting user-agent header with Databinder

2009-09-08 Thread Randinn

What was the answer now that you have attained it?

On Sep 9, 3:02 am, Jack Widman  wrote:
> You are right. I will fine tune my determine which is a good question to ask
> mechanism :)
>
> On Tue, Sep 8, 2009 at 12:54 PM, Timothy Perrett 
> wrote:
>
>
>
> > IMHO, you'd probably get better traction with such questions in a
> > wider audience on the main scala-user list over at EPFL...
>
> > Cheers, Tim
>
> > On 8 Sep 2009, at 17:26, Jack Widman wrote:
>
> > > Right. I will try to keep to the topic :)
>
> > > I actually found him and he quickly answered me.
>
> > > On Tue, Sep 8, 2009 at 12:24 PM, David Pollak <
> > feeder.of.the.be...@gmail.com
> > > > wrote:
> > > Jack,
>
> > > I'm not sure where N8han (the author of Databinder) hangs out, but
> > > it's not on the Lift list.  :-(
>
> > > Sorry.
>
> > > David
>
> > > On Tue, Sep 8, 2009 at 8:58 AM, jack  wrote:
>
> > > Please forgive me for including so much code but I have an important
> > > demo fast approaching and I'm kind of in a bind. I am using
> > > Databinders Dispatch http library which is a wrapper around Javas
> > > HttpClient library. I have included the Http class below. Does anyone
> > > see how to set the user-agent header. Once again I apologize and would
> > > be much obliged for any help.
>
> > > import collection.Map
> > > import collection.immutable.{Map => IMap}
> > > import util.DynamicVariable
> > > import java.io.
> > > {InputStream,OutputStream,BufferedInputStream,BufferedOutputStream}
> > > import java.net.URI
> > > import java.util.zip.GZIPInputStream
>
> > > import org.apache.http._
> > > import org.apache.http.client._
> > > import org.apache.http.impl.client.{DefaultHttpClient,
> > > BasicCredentialsProvider}
> > > import org.apache.http.client.methods._
> > > import org.apache.http.client.entity.UrlEncodedFormEntity
> > > import org.apache.http.client.utils.URLEncodedUtils
>
> > > import org.apache.http.entity.StringEntity
> > > import org.apache.http.message.BasicNameValuePair
> > > import org.apache.http.protocol.HTTP.UTF_8
> > > import org.apache.http.params.{HttpProtocolParams, BasicHttpParams}
> > > import org.apache.http.util.EntityUtils
> > > import org.apache.http.auth.{AuthScope, UsernamePasswordCredentials,
> > > Credentials}
>
> > > case class StatusCode(code: Int, contents:String)
> > >  extends Exception("Exceptional resoponse code: " + code + "\n" +
> > > contents)
>
> > > /** Http access point. Standard instances to be used by a single
> > > thread. */
> > > class Http {
> > >  val credentials = new DynamicVariable[Option[(AuthScope,
> > > Credentials)]](None)
> > >  val client = new ConfiguredHttpClient
>
> > >  def credentialsProvider = new BasicCredentialsProvider {
> > >    override def getCredentials(scope: AuthScope) = null
> > >  }
>
> > > /**  /** Info Logger for this instance, default returns Connfiggy if
> > > on classpath else console logger. */
> > >  lazy val log: Logger = try {
> > >    new Logger {
> > >      val delegate = net.lag.logging.Logger.get
> > >      def info(msg: String, items: Any*) { delegate.info(msg, items:
> > > _*) }
> > >    }
> > >  } catch {
> > >    case e: NoClassDefFoundError => new Logger {
> > >      def info(msg: String, items: Any*) {
> > >        println("INF: [console logger] dispatch: " + msg.format(items:
> > > _*))
> > >      }
> > >    }
> > >  }
> > >  **/
> > >  /** Execute method for the given host, with logging. */
> > >  def execute(host: HttpHost, req: HttpUriRequest) = {
> > >    //log.info("%s %s%s", req.getMethod, host, req.getURI)
> > >    client.execute(host, req)
> > >  }
> > >  /** Execute for given optional parametrs, with logging. Creates
> > > local scope for credentials. */
> > >  val execute: (Option[HttpHost], Option[Credentials], HttpUriRequest)
> > > => HttpResponse = {
> > >    case (Some(host), Some(creds), req) =>
> > >      client.credentials.withValue(Some((new AuthScope
> > > (host.getHostName, host.getPort), creds)))(execute(host, req))
> > >    case (None, Some(creds), _) => error("Credentials specified
> > > without explicit host")
> > >    case (Some(host), _, req) => execute(host, req)
> > >    case (_, _, req) =>
> > >      //log.info("%s %s", req.getMethod, req.getURI)
> > >      client.execute(req)
> > >  }
> > >  /** Execute full request-response handler. */
> > >  def x[T](hand: Handler[T]): T = x(hand.request)(hand.block)
> > >  /** Execute request and handle response codes, response, and entity
> > > in block */
> > >  def x [T](req: Request)(block: Handler.F[T]) = {
> > >    val res = execute(req.host, req.creds, req.req)
> > >    val ent = res.getEntity match {
> > >      case null => None
> > >      case ent => Some(ent)
> > >    }
> > >    try { block(res.getStatusLine.getStatusCode, res, ent) }
> > >    finally { ent foreach (_.consumeContent) }
> > >  }
> > >  /** Apply Response Handler if reponse code returns true from chk. */
> > >  def when[T](chk: Int => Boolean)(hand: Handler[T]) = x(hand.request)
> > > {
> > > 

[Lift] Re: Box and bind

2009-09-08 Thread Naftoli Gugenheim

Yup

-
José María wrote:


OMG

So, as -> begins with "-" then it has the precedence of the operator
-



On Sep 8, 7:52 pm, Naftoli Gugenheim  wrote:
> Precedence is determined by the first character of an operator.
>
> -
>
> Ross Mellgren wrote:
>
> Because the compiler interpret your expression as you expect. Instead  
> of:
>
> "url_enlace" -> ("/product/" + product.id.toString)
>
> which is what you wanted, it got:
>
> ("url_enlace" -> "/product/") + product.id.toString)
>
> which it can do because it can take an arbitrary object:
>
> ("url_enlace" -> "/product/"): ABindParam
> or (the other implicit ->)
> ("url_enlace" -> "/product/"): Tuple2[String, String]
>
> and convert them to strings. Of course, once it converts to string, it  
> won't fit in bind()'s argument list and so it gave you the could not  
> find overload error.
>
> Honestly I'm a bit fuzzy on Scala's operator precedence behavior, I  
> think if I recall you can't set precedence, it comes pre-set on all  
> the standard operators like + / -, etc.
>
> -Ross
>
> On Sep 8, 2009, at 3:42 PM, José María wrote:
>
>
>
> > It worked when I put the () around the bind param
>
> > and the question is ... why?
>
> > On Sep 8, 7:35 pm, Ross Mellgren  wrote:
> >> So that doesn't seem to be a box-related thing so much as a bind
> >> argument related thing, probably because you have a precedence
> >> problem... try:
>
> >> producto.map(product =>
> >>    bind("product", xhtml,
> >>         "url_enlace" -> ("/product/" + product.id.toString),
> >>        )
> >> ).openOr(NodeSeq.Empty)
>
> >> Also, FYI, you have val product = Product.find(id), but then map over
> >> producto. I presume either producto is coming from somewhere else  
> >> (and
> >> val product is being shadowed inside the map) or that you pasted not
> >> exactly what you're compiling.
>
> >> -Ross
>
> >> On Sep 8, 2009, at 3:25 PM, José María wrote:
>
> >>> That's my code:
>
> >>>    val product = Product.find(id)
>
> >>>    producto.map(product =>
> >>>      bind("product", xhtml,
> >>>           "url_enlace" --> "/product/" + product.id.toString ,
> >>>          )
> >>>               ).openOr(NodeSeq.Empty)
> >>>    }
>
> >>> and I get this error:
>
> >>> [INFO] use java command with args in file forced : false
> >>> /usr/home/josemaria/src/lift/helloworld/src/main/scala/demo/
> >>> helloworld/
> >>> snippet/Portada.scala:55: error: overloaded method value bind with
> >>> alternatives (String,net.liftweb.util.Box[(scala.xml.NodeSeq) =>
> >>> scala.xml.NodeSeq],net.liftweb.util.Box
> >>> [(scala.xml.PrefixedAttribute)
> >>> =>
> >>> scala.xml.MetaData
> >>> ],scala.xml.NodeSeq,net.liftweb.util.Helpers.BindParam*)
> >>> scala.xml.NodeSeq 
> >>> (String,scala.xml.NodeSeq,net.liftweb.util.Helpers.BindParam*)
> >>> scala.xml.NodeSeq cannot be applied to
> >>> (java.lang.String
> >>> ,scala.xml.NodeSeq
> >>> ,java.lang.String
> >>> ,java.lang.String
> >>> ,net.liftweb.util.Helpers.BindParam
> >>> ,net.liftweb.util.Helpers.BindParam)
> >>>      bind("producto", xhtml,
> >>>      ^
> >>> one error found
>
> >>> What's wrong?
>
> >>> On Sep 8, 7:13 pm, Ross Mellgren  wrote:
>  Well it depends on precisely what you want. If you want your  
>  snippet
>  to become empty if the product is not there, try:
>
>  productBox.map(product => {
>     bind("product", ns, ...)
>
>  }).openOr(NodeSeq.Empty)
>
>  If you want only certain bind positions empty, do the same thing
>  inside the bind:
>
>  bind("proudct", ns,
>        "field" -> productBox.map(p => Text(p.field.toString)).openOr
>  (NodeSeq.Empty),
>        ...)
>
>  map is of course just one of the (simpler) operations you can do  
>  with
>  a Box, there's more complicated stuff if you need other variants.
>
>  -Ross
>
>  On Sep 8, 2009, at 3:06 PM, José María wrote:
>
> > Hi.
>
> > Boxes are giving me a hard time.
>
> > Say you have a model of a Product.
>
> > If I've a snippet that retrieves a Product from the DB:
>
> > val product : Box[Product] = Product.find(2)
>
> > And now I want to bind "product" with bind(),  product is a Box
> > and it
> > can be empty, how can I bind something that doesn't exists? You  
> > have
> > to return a NodeSeq in a snippet. What should my code must do?
>
> > Best regards.
>
>


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: Lift WebServices

2009-09-08 Thread David Pollak
You declared the LiftFilter twice in your web.xml file:

  
LiftFilter
Lift Filter
The Filter that intercepts lift calls
net.liftweb.http.LiftFilter
  

THis caused the filter to be loaded twice.

Remove one of the filter declarations and you should be fine.

On Tue, Sep 8, 2009 at 9:43 AM, abruzzo  wrote:

>
> I'm trying to set up a simple web service using Lift v1.0. I've
> scoured
> across many examples but because of changes in the api's, none of them
> compile. I finally found an example of a dispatcher tha compiles but
> in the
> sample as in others the dispatcher is added in the boot method of the
> Boot
> class as follows:
>
>LiftRules.dispatch.prepend(RestApi.dispatch)
>
>
> This compiles fine however, upon startup I get the following stack:
>
> ERROR - Failed to Boot
> java.lang.IllegalStateException: Cannot modify after boot.
>at net.liftweb.http.RulesSeq$class.safe_$qmark(LiftRules.scala:885)
>at net.liftweb.http.RulesSeq$class.prepend(LiftRules.scala:892)
>at net.liftweb.http.RulesSeq$$anon$3.prepend(LiftRules.scala:872)
>at net.liftweb.http.LiftFilter.preBoot(LiftServlet.scala:581)
>at net.liftweb.http.LiftFilter.bootLift(LiftServlet.scala:572)
>at net.liftweb.http.LiftFilter.init(LiftServlet.scala:548)
>at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:
> 97)
>at org.mortbay.component.AbstractLifeCycle.start
> (AbstractLifeCycle.java:50)
>at
> org.mortbay.jetty.servlet.ServletHandler.initialize
> (ServletHandler.java:653)
>at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)
>at
> org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:
> 1239)
>at
> org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:
> 517)
>at
> org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:
> 466)
>at
> org.mortbay.jetty.plugin.Jetty6PluginWebAppContext.doStart
> (Jetty6PluginWebAppContext.java:124)
>at org.mortbay.component.AbstractLifeCycle.start
> (AbstractLifeCycle.java:50)
>at
> org.mortbay.jetty.handler.HandlerCollection.doStart
> (HandlerCollection.java:152)
>at
> org.mortbay.jetty.handler.ContextHandlerCollection.doStart
> (ContextHandlerCollection.java:156)
>at org.mortbay.component.AbstractLifeCycle.start
> (AbstractLifeCycle.java:50)
>at
> org.mortbay.jetty.handler.HandlerCollection.doStart
> (HandlerCollection.java:152)
>at org.mortbay.component.AbstractLifeCycle.start
> (AbstractLifeCycle.java:50)
>at
> org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:
> 130)
>at org.mortbay.jetty.Server.doStart(Server.java:224)
>at org.mortbay.component.AbstractLifeCycle.start
> (AbstractLifeCycle.java:50)
>at
> org.mortbay.jetty.plugin.Jetty6PluginServer.start
> (Jetty6PluginServer.java:132)
>at
> org.mortbay.jetty.plugin.AbstractJettyMojo.startJetty
> (AbstractJettyMojo.java:441)
>at
> org.mortbay.jetty.plugin.AbstractJettyMojo.execute
> (AbstractJettyMojo.java:383)
>at
> org.mortbay.jetty.plugin.AbstractJettyRunMojo.execute
> (AbstractJettyRunMojo.java:210)
>at
> org.mortbay.jetty.plugin.Jetty6RunMojo.execute(Jetty6RunMojo.java:
> 184)
>at
> org.apache.maven.plugin.DefaultPluginManager.executeMojo
> (DefaultPluginManager.java:451)
>at
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals
> (DefaultLifecycleExecutor.java:558)
>at
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandaloneGoal
> (DefaultLifecycleExecutor.java:512)
>at
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal
> (DefaultLifecycleExecutor.java:482)
>at
>
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures
> (DefaultLifecycleExecutor.java:330)
>at
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments
> (DefaultLifecycleExecutor.java:291)
>at
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute
> (DefaultLifecycleExecutor.java:142)
>at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:336)
>at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:129)
>at org.apache.maven.cli.MavenCli.main(MavenCli.java:287)
>at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>at
> sun.reflect.NativeMethodAccessorImpl.invoke
> (NativeMethodAccessorImpl.java:39)
>at
> sun.reflect.DelegatingMethodAccessorImpl.invoke
> (DelegatingMethodAccessorImpl.java:25)
>at java.lang.reflect.Method.invoke(Method.java:597)
>at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:
> 315)
>at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
>at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:
> 430)
>at org.codehaus.classworlds.Launcher.main(

[Lift] Re: Box and bind

2009-09-08 Thread José María

OMG

So, as -> begins with "-" then it has the precedence of the operator
-



On Sep 8, 7:52 pm, Naftoli Gugenheim  wrote:
> Precedence is determined by the first character of an operator.
>
> -
>
> Ross Mellgren wrote:
>
> Because the compiler interpret your expression as you expect. Instead  
> of:
>
> "url_enlace" -> ("/product/" + product.id.toString)
>
> which is what you wanted, it got:
>
> ("url_enlace" -> "/product/") + product.id.toString)
>
> which it can do because it can take an arbitrary object:
>
> ("url_enlace" -> "/product/"): ABindParam
> or (the other implicit ->)
> ("url_enlace" -> "/product/"): Tuple2[String, String]
>
> and convert them to strings. Of course, once it converts to string, it  
> won't fit in bind()'s argument list and so it gave you the could not  
> find overload error.
>
> Honestly I'm a bit fuzzy on Scala's operator precedence behavior, I  
> think if I recall you can't set precedence, it comes pre-set on all  
> the standard operators like + / -, etc.
>
> -Ross
>
> On Sep 8, 2009, at 3:42 PM, José María wrote:
>
>
>
> > It worked when I put the () around the bind param
>
> > and the question is ... why?
>
> > On Sep 8, 7:35 pm, Ross Mellgren  wrote:
> >> So that doesn't seem to be a box-related thing so much as a bind
> >> argument related thing, probably because you have a precedence
> >> problem... try:
>
> >> producto.map(product =>
> >>    bind("product", xhtml,
> >>         "url_enlace" -> ("/product/" + product.id.toString),
> >>        )
> >> ).openOr(NodeSeq.Empty)
>
> >> Also, FYI, you have val product = Product.find(id), but then map over
> >> producto. I presume either producto is coming from somewhere else  
> >> (and
> >> val product is being shadowed inside the map) or that you pasted not
> >> exactly what you're compiling.
>
> >> -Ross
>
> >> On Sep 8, 2009, at 3:25 PM, José María wrote:
>
> >>> That's my code:
>
> >>>    val product = Product.find(id)
>
> >>>    producto.map(product =>
> >>>      bind("product", xhtml,
> >>>           "url_enlace" --> "/product/" + product.id.toString ,
> >>>          )
> >>>               ).openOr(NodeSeq.Empty)
> >>>    }
>
> >>> and I get this error:
>
> >>> [INFO] use java command with args in file forced : false
> >>> /usr/home/josemaria/src/lift/helloworld/src/main/scala/demo/
> >>> helloworld/
> >>> snippet/Portada.scala:55: error: overloaded method value bind with
> >>> alternatives (String,net.liftweb.util.Box[(scala.xml.NodeSeq) =>
> >>> scala.xml.NodeSeq],net.liftweb.util.Box
> >>> [(scala.xml.PrefixedAttribute)
> >>> =>
> >>> scala.xml.MetaData
> >>> ],scala.xml.NodeSeq,net.liftweb.util.Helpers.BindParam*)
> >>> scala.xml.NodeSeq 
> >>> (String,scala.xml.NodeSeq,net.liftweb.util.Helpers.BindParam*)
> >>> scala.xml.NodeSeq cannot be applied to
> >>> (java.lang.String
> >>> ,scala.xml.NodeSeq
> >>> ,java.lang.String
> >>> ,java.lang.String
> >>> ,net.liftweb.util.Helpers.BindParam
> >>> ,net.liftweb.util.Helpers.BindParam)
> >>>      bind("producto", xhtml,
> >>>      ^
> >>> one error found
>
> >>> What's wrong?
>
> >>> On Sep 8, 7:13 pm, Ross Mellgren  wrote:
>  Well it depends on precisely what you want. If you want your  
>  snippet
>  to become empty if the product is not there, try:
>
>  productBox.map(product => {
>     bind("product", ns, ...)
>
>  }).openOr(NodeSeq.Empty)
>
>  If you want only certain bind positions empty, do the same thing
>  inside the bind:
>
>  bind("proudct", ns,
>        "field" -> productBox.map(p => Text(p.field.toString)).openOr
>  (NodeSeq.Empty),
>        ...)
>
>  map is of course just one of the (simpler) operations you can do  
>  with
>  a Box, there's more complicated stuff if you need other variants.
>
>  -Ross
>
>  On Sep 8, 2009, at 3:06 PM, José María wrote:
>
> > Hi.
>
> > Boxes are giving me a hard time.
>
> > Say you have a model of a Product.
>
> > If I've a snippet that retrieves a Product from the DB:
>
> > val product : Box[Product] = Product.find(2)
>
> > And now I want to bind "product" with bind(),  product is a Box
> > and it
> > can be empty, how can I bind something that doesn't exists? You  
> > have
> > to return a NodeSeq in a snippet. What should my code must do?
>
> > Best regards.
>
>
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: Box and bind

2009-09-08 Thread Naftoli Gugenheim

Precedence is determined by the first character of an operator.

-
Ross Mellgren wrote:


Because the compiler interpret your expression as you expect. Instead  
of:

"url_enlace" -> ("/product/" + product.id.toString)

which is what you wanted, it got:

("url_enlace" -> "/product/") + product.id.toString)

which it can do because it can take an arbitrary object:

("url_enlace" -> "/product/"): ABindParam
or (the other implicit ->)
("url_enlace" -> "/product/"): Tuple2[String, String]

and convert them to strings. Of course, once it converts to string, it  
won't fit in bind()'s argument list and so it gave you the could not  
find overload error.

Honestly I'm a bit fuzzy on Scala's operator precedence behavior, I  
think if I recall you can't set precedence, it comes pre-set on all  
the standard operators like + / -, etc.

-Ross


On Sep 8, 2009, at 3:42 PM, José María wrote:

>
> It worked when I put the () around the bind param
>
> and the question is ... why?
>
>
>
>
> On Sep 8, 7:35 pm, Ross Mellgren  wrote:
>> So that doesn't seem to be a box-related thing so much as a bind
>> argument related thing, probably because you have a precedence
>> problem... try:
>>
>> producto.map(product =>
>>bind("product", xhtml,
>> "url_enlace" -> ("/product/" + product.id.toString),
>>)
>> ).openOr(NodeSeq.Empty)
>>
>> Also, FYI, you have val product = Product.find(id), but then map over
>> producto. I presume either producto is coming from somewhere else  
>> (and
>> val product is being shadowed inside the map) or that you pasted not
>> exactly what you're compiling.
>>
>> -Ross
>>
>> On Sep 8, 2009, at 3:25 PM, José María wrote:
>>
>>
>>
>>> That's my code:
>>
>>>val product = Product.find(id)
>>
>>>producto.map(product =>
>>>  bind("product", xhtml,
>>>   "url_enlace" --> "/product/" + product.id.toString ,
>>>  )
>>>   ).openOr(NodeSeq.Empty)
>>>}
>>
>>> and I get this error:
>>
>>> [INFO] use java command with args in file forced : false
>>> /usr/home/josemaria/src/lift/helloworld/src/main/scala/demo/
>>> helloworld/
>>> snippet/Portada.scala:55: error: overloaded method value bind with
>>> alternatives (String,net.liftweb.util.Box[(scala.xml.NodeSeq) =>
>>> scala.xml.NodeSeq],net.liftweb.util.Box 
>>> [(scala.xml.PrefixedAttribute)
>>> =>
>>> scala.xml.MetaData
>>> ],scala.xml.NodeSeq,net.liftweb.util.Helpers.BindParam*)
>>> scala.xml.NodeSeq 
>>> (String,scala.xml.NodeSeq,net.liftweb.util.Helpers.BindParam*)
>>> scala.xml.NodeSeq cannot be applied to
>>> (java.lang.String
>>> ,scala.xml.NodeSeq
>>> ,java.lang.String
>>> ,java.lang.String
>>> ,net.liftweb.util.Helpers.BindParam
>>> ,net.liftweb.util.Helpers.BindParam)
>>>  bind("producto", xhtml,
>>>  ^
>>> one error found
>>
>>> What's wrong?
>>
>>> On Sep 8, 7:13 pm, Ross Mellgren  wrote:
 Well it depends on precisely what you want. If you want your  
 snippet
 to become empty if the product is not there, try:
>>
 productBox.map(product => {
bind("product", ns, ...)
>>
 }).openOr(NodeSeq.Empty)
>>
 If you want only certain bind positions empty, do the same thing
 inside the bind:
>>
 bind("proudct", ns,
   "field" -> productBox.map(p => Text(p.field.toString)).openOr
 (NodeSeq.Empty),
   ...)
>>
 map is of course just one of the (simpler) operations you can do  
 with
 a Box, there's more complicated stuff if you need other variants.
>>
 -Ross
>>
 On Sep 8, 2009, at 3:06 PM, José María wrote:
>>
> Hi.
>>
> Boxes are giving me a hard time.
>>
> Say you have a model of a Product.
>>
> If I've a snippet that retrieves a Product from the DB:
>>
> val product : Box[Product] = Product.find(2)
>>
> And now I want to bind "product" with bind(),  product is a Box
> and it
> can be empty, how can I bind something that doesn't exists? You  
> have
> to return a NodeSeq in a snippet. What should my code must do?
>>
> Best regards.
>>
>>
> >




--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: Box and bind

2009-09-08 Thread Naftoli Gugenheim

Operators starting with - and + have the same precendence so they are combined 
left to right. Thus you are concatenating a BindParam with a String, returning 
a String.

-
José María wrote:


It worked when I put the () around the bind param

and the question is ... why?




On Sep 8, 7:35 pm, Ross Mellgren  wrote:
> So that doesn't seem to be a box-related thing so much as a bind  
> argument related thing, probably because you have a precedence  
> problem... try:
>
> producto.map(product =>
>    bind("product", xhtml,
>         "url_enlace" -> ("/product/" + product.id.toString),
>        )
> ).openOr(NodeSeq.Empty)
>
> Also, FYI, you have val product = Product.find(id), but then map over  
> producto. I presume either producto is coming from somewhere else (and  
> val product is being shadowed inside the map) or that you pasted not  
> exactly what you're compiling.
>
> -Ross
>
> On Sep 8, 2009, at 3:25 PM, José María wrote:
>
>
>
> > That's my code:
>
> >    val product = Product.find(id)
>
> >    producto.map(product =>
> >      bind("product", xhtml,
> >           "url_enlace" --> "/product/" + product.id.toString ,
> >          )
> >               ).openOr(NodeSeq.Empty)
> >    }
>
> > and I get this error:
>
> > [INFO] use java command with args in file forced : false
> > /usr/home/josemaria/src/lift/helloworld/src/main/scala/demo/
> > helloworld/
> > snippet/Portada.scala:55: error: overloaded method value bind with
> > alternatives (String,net.liftweb.util.Box[(scala.xml.NodeSeq) =>
> > scala.xml.NodeSeq],net.liftweb.util.Box[(scala.xml.PrefixedAttribute)
> > =>
> > scala.xml.MetaData
> > ],scala.xml.NodeSeq,net.liftweb.util.Helpers.BindParam*)
> > scala.xml.NodeSeq 
> > (String,scala.xml.NodeSeq,net.liftweb.util.Helpers.BindParam*)
> > scala.xml.NodeSeq cannot be applied to
> > (java.lang.String
> > ,scala.xml.NodeSeq
> > ,java.lang.String
> > ,java.lang.String
> > ,net.liftweb.util.Helpers.BindParam
> > ,net.liftweb.util.Helpers.BindParam)
> >      bind("producto", xhtml,
> >      ^
> > one error found
>
> > What's wrong?
>
> > On Sep 8, 7:13 pm, Ross Mellgren  wrote:
> >> Well it depends on precisely what you want. If you want your snippet
> >> to become empty if the product is not there, try:
>
> >> productBox.map(product => {
> >>    bind("product", ns, ...)
>
> >> }).openOr(NodeSeq.Empty)
>
> >> If you want only certain bind positions empty, do the same thing
> >> inside the bind:
>
> >> bind("proudct", ns,
> >>       "field" -> productBox.map(p => Text(p.field.toString)).openOr
> >> (NodeSeq.Empty),
> >>       ...)
>
> >> map is of course just one of the (simpler) operations you can do with
> >> a Box, there's more complicated stuff if you need other variants.
>
> >> -Ross
>
> >> On Sep 8, 2009, at 3:06 PM, José María wrote:
>
> >>> Hi.
>
> >>> Boxes are giving me a hard time.
>
> >>> Say you have a model of a Product.
>
> >>> If I've a snippet that retrieves a Product from the DB:
>
> >>> val product : Box[Product] = Product.find(2)
>
> >>> And now I want to bind "product" with bind(),  product is a Box  
> >>> and it
> >>> can be empty, how can I bind something that doesn't exists? You have
> >>> to return a NodeSeq in a snippet. What should my code must do?
>
> >>> Best regards.
>
>


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: Box and bind

2009-09-08 Thread Ross Mellgren

Because the compiler interpret your expression as you expect. Instead  
of:

"url_enlace" -> ("/product/" + product.id.toString)

which is what you wanted, it got:

("url_enlace" -> "/product/") + product.id.toString)

which it can do because it can take an arbitrary object:

("url_enlace" -> "/product/"): ABindParam
or (the other implicit ->)
("url_enlace" -> "/product/"): Tuple2[String, String]

and convert them to strings. Of course, once it converts to string, it  
won't fit in bind()'s argument list and so it gave you the could not  
find overload error.

Honestly I'm a bit fuzzy on Scala's operator precedence behavior, I  
think if I recall you can't set precedence, it comes pre-set on all  
the standard operators like + / -, etc.

-Ross


On Sep 8, 2009, at 3:42 PM, José María wrote:

>
> It worked when I put the () around the bind param
>
> and the question is ... why?
>
>
>
>
> On Sep 8, 7:35 pm, Ross Mellgren  wrote:
>> So that doesn't seem to be a box-related thing so much as a bind
>> argument related thing, probably because you have a precedence
>> problem... try:
>>
>> producto.map(product =>
>>bind("product", xhtml,
>> "url_enlace" -> ("/product/" + product.id.toString),
>>)
>> ).openOr(NodeSeq.Empty)
>>
>> Also, FYI, you have val product = Product.find(id), but then map over
>> producto. I presume either producto is coming from somewhere else  
>> (and
>> val product is being shadowed inside the map) or that you pasted not
>> exactly what you're compiling.
>>
>> -Ross
>>
>> On Sep 8, 2009, at 3:25 PM, José María wrote:
>>
>>
>>
>>> That's my code:
>>
>>>val product = Product.find(id)
>>
>>>producto.map(product =>
>>>  bind("product", xhtml,
>>>   "url_enlace" --> "/product/" + product.id.toString ,
>>>  )
>>>   ).openOr(NodeSeq.Empty)
>>>}
>>
>>> and I get this error:
>>
>>> [INFO] use java command with args in file forced : false
>>> /usr/home/josemaria/src/lift/helloworld/src/main/scala/demo/
>>> helloworld/
>>> snippet/Portada.scala:55: error: overloaded method value bind with
>>> alternatives (String,net.liftweb.util.Box[(scala.xml.NodeSeq) =>
>>> scala.xml.NodeSeq],net.liftweb.util.Box 
>>> [(scala.xml.PrefixedAttribute)
>>> =>
>>> scala.xml.MetaData
>>> ],scala.xml.NodeSeq,net.liftweb.util.Helpers.BindParam*)
>>> scala.xml.NodeSeq 
>>> (String,scala.xml.NodeSeq,net.liftweb.util.Helpers.BindParam*)
>>> scala.xml.NodeSeq cannot be applied to
>>> (java.lang.String
>>> ,scala.xml.NodeSeq
>>> ,java.lang.String
>>> ,java.lang.String
>>> ,net.liftweb.util.Helpers.BindParam
>>> ,net.liftweb.util.Helpers.BindParam)
>>>  bind("producto", xhtml,
>>>  ^
>>> one error found
>>
>>> What's wrong?
>>
>>> On Sep 8, 7:13 pm, Ross Mellgren  wrote:
 Well it depends on precisely what you want. If you want your  
 snippet
 to become empty if the product is not there, try:
>>
 productBox.map(product => {
bind("product", ns, ...)
>>
 }).openOr(NodeSeq.Empty)
>>
 If you want only certain bind positions empty, do the same thing
 inside the bind:
>>
 bind("proudct", ns,
   "field" -> productBox.map(p => Text(p.field.toString)).openOr
 (NodeSeq.Empty),
   ...)
>>
 map is of course just one of the (simpler) operations you can do  
 with
 a Box, there's more complicated stuff if you need other variants.
>>
 -Ross
>>
 On Sep 8, 2009, at 3:06 PM, José María wrote:
>>
> Hi.
>>
> Boxes are giving me a hard time.
>>
> Say you have a model of a Product.
>>
> If I've a snippet that retrieves a Product from the DB:
>>
> val product : Box[Product] = Product.find(2)
>>
> And now I want to bind "product" with bind(),  product is a Box
> and it
> can be empty, how can I bind something that doesn't exists? You  
> have
> to return a NodeSeq in a snippet. What should my code must do?
>>
> Best regards.
>>
>>
> >


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: Some XML special chars rendered by lift, others not in 1.1-SNAPSHOT

2009-09-08 Thread David Pollak
Okay... I'll check in the change after Charles finishes the M5 build

On Tue, Sep 8, 2009 at 12:10 PM, jon  wrote:

>
> Aha,
>
> It is a header problem.  If the charset is specified in the content-
> type IE will pick the right encoding.  I added the following to my
> Boot (I already had LiftRules.useXhtmlMimeType = false):
>
>LiftRules.determineContentType = {
>case _ => "text/html; charset=utf-8"
> }
>
> Maybe this should be the default?
>
> Thanks!
>
> On Sep 8, 2:45 pm, David Pollak  wrote:
> > On Tue, Sep 8, 2009 at 10:37 AM, jon  wrote:
> >
> > > Ah, IE7 seems to be confused about the character encoding of the
> > > page.  When the encoding is set to "Auto Select" it chooses "Western
> > > European (Windows)" and the © displays as  ©.  If I turn off "Auto
> > > Select" and manually set to "Unicode (UTF-8)" it displays correctly.
> >
> > I wonder if this is a header issue... I'll put this on my to do list to
> > investigate.
> >
> > Although, I bet Tim has something to say about it.
> >
> >
> >
> >
> >
> >
> >
> > > I have LiftRules.early.append(makeUtf8) in Boot.  And the page
> > > includes ""
> >
> > > Any ideas?
> >
> > > Thanks,
> >
> > > Jon
> >
> > > On Sep 8, 9:26 am, David Pollak  wrote:
> > > > On Mon, Sep 7, 2009 at 11:38 PM, jon  wrote:
> >
> > > > > Hi,
> >
> > > > > I've noticed that some special char xml tags are being interpreted
> by
> > > > > lift rather than passing through to the browser.
> >
> > > > > source code in my template:
> > > > > 
> > > > >  &
> > > > >  ©
> > > > >  "
> > > > >  »
> > > > >  <
> > > > >  >
> > > > > 
> >
> > > > > result from curlhttp://localhost:8080/
> > > > >
> > > > >  &
> > > > >  ©
> > > > >  "
> > > > >  »
> > > > >  <
> > > > >  >
> > > > >
> >
> > > > > The rendered characters are problematic in IE7.
> >
> > > > Why?
> >
> > > > >  A fix or workaround
> > > > > would be much appreciated.
> >
> > > > The raw XHTML is valid.  Lift is yielding non-ASCII characters, but
> they
> > > are
> > > > UTF-8 encoded and should be correctly rendered on all browsers.  I
> have
> > > > never seen a problem with IE6 or IE7 (I have not tested in IE8)
> >
> > > > > Thanks,
> >
> > > > > - Jon
> >
> > > > --
> > > > Lift, the simply functional web frameworkhttp://liftweb.net
> > > > Beginning Scalahttp://www.apress.com/book/view/1430219890
> > > > Follow me:http://twitter.com/dpp
> > > > Git some:http://github.com/dpp
> >
> > --
> > Lift, the simply functional web frameworkhttp://liftweb.net
> > Beginning Scalahttp://www.apress.com/book/view/1430219890
> > Follow me:http://twitter.com/dpp
> > Git some:http://github.com/dpp
> >
>


-- 
Lift, the simply functional web framework http://liftweb.net
Beginning Scala http://www.apress.com/book/view/1430219890
Follow me: http://twitter.com/dpp
Git some: http://github.com/dpp

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: Box and bind

2009-09-08 Thread José María

It worked when I put the () around the bind param

and the question is ... why?




On Sep 8, 7:35 pm, Ross Mellgren  wrote:
> So that doesn't seem to be a box-related thing so much as a bind  
> argument related thing, probably because you have a precedence  
> problem... try:
>
> producto.map(product =>
>    bind("product", xhtml,
>         "url_enlace" -> ("/product/" + product.id.toString),
>        )
> ).openOr(NodeSeq.Empty)
>
> Also, FYI, you have val product = Product.find(id), but then map over  
> producto. I presume either producto is coming from somewhere else (and  
> val product is being shadowed inside the map) or that you pasted not  
> exactly what you're compiling.
>
> -Ross
>
> On Sep 8, 2009, at 3:25 PM, José María wrote:
>
>
>
> > That's my code:
>
> >    val product = Product.find(id)
>
> >    producto.map(product =>
> >      bind("product", xhtml,
> >           "url_enlace" --> "/product/" + product.id.toString ,
> >          )
> >               ).openOr(NodeSeq.Empty)
> >    }
>
> > and I get this error:
>
> > [INFO] use java command with args in file forced : false
> > /usr/home/josemaria/src/lift/helloworld/src/main/scala/demo/
> > helloworld/
> > snippet/Portada.scala:55: error: overloaded method value bind with
> > alternatives (String,net.liftweb.util.Box[(scala.xml.NodeSeq) =>
> > scala.xml.NodeSeq],net.liftweb.util.Box[(scala.xml.PrefixedAttribute)
> > =>
> > scala.xml.MetaData
> > ],scala.xml.NodeSeq,net.liftweb.util.Helpers.BindParam*)
> > scala.xml.NodeSeq 
> > (String,scala.xml.NodeSeq,net.liftweb.util.Helpers.BindParam*)
> > scala.xml.NodeSeq cannot be applied to
> > (java.lang.String
> > ,scala.xml.NodeSeq
> > ,java.lang.String
> > ,java.lang.String
> > ,net.liftweb.util.Helpers.BindParam
> > ,net.liftweb.util.Helpers.BindParam)
> >      bind("producto", xhtml,
> >      ^
> > one error found
>
> > What's wrong?
>
> > On Sep 8, 7:13 pm, Ross Mellgren  wrote:
> >> Well it depends on precisely what you want. If you want your snippet
> >> to become empty if the product is not there, try:
>
> >> productBox.map(product => {
> >>    bind("product", ns, ...)
>
> >> }).openOr(NodeSeq.Empty)
>
> >> If you want only certain bind positions empty, do the same thing
> >> inside the bind:
>
> >> bind("proudct", ns,
> >>       "field" -> productBox.map(p => Text(p.field.toString)).openOr
> >> (NodeSeq.Empty),
> >>       ...)
>
> >> map is of course just one of the (simpler) operations you can do with
> >> a Box, there's more complicated stuff if you need other variants.
>
> >> -Ross
>
> >> On Sep 8, 2009, at 3:06 PM, José María wrote:
>
> >>> Hi.
>
> >>> Boxes are giving me a hard time.
>
> >>> Say you have a model of a Product.
>
> >>> If I've a snippet that retrieves a Product from the DB:
>
> >>> val product : Box[Product] = Product.find(2)
>
> >>> And now I want to bind "product" with bind(),  product is a Box  
> >>> and it
> >>> can be empty, how can I bind something that doesn't exists? You have
> >>> to return a NodeSeq in a snippet. What should my code must do?
>
> >>> Best regards.
>
>
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: Box and bind

2009-09-08 Thread José María

I adapted the code but not the error, Producto is Product in Spanish.



On Sep 8, 7:35 pm, Ross Mellgren  wrote:
> So that doesn't seem to be a box-related thing so much as a bind  
> argument related thing, probably because you have a precedence  
> problem... try:
>
> producto.map(product =>
>    bind("product", xhtml,
>         "url_enlace" -> ("/product/" + product.id.toString),
>        )
> ).openOr(NodeSeq.Empty)
>
> Also, FYI, you have val product = Product.find(id), but then map over  
> producto. I presume either producto is coming from somewhere else (and  
> val product is being shadowed inside the map) or that you pasted not  
> exactly what you're compiling.
>
> -Ross
>
> On Sep 8, 2009, at 3:25 PM, José María wrote:
>
>
>
> > That's my code:
>
> >    val product = Product.find(id)
>
> >    producto.map(product =>
> >      bind("product", xhtml,
> >           "url_enlace" --> "/product/" + product.id.toString ,
> >          )
> >               ).openOr(NodeSeq.Empty)
> >    }
>
> > and I get this error:
>
> > [INFO] use java command with args in file forced : false
> > /usr/home/josemaria/src/lift/helloworld/src/main/scala/demo/
> > helloworld/
> > snippet/Portada.scala:55: error: overloaded method value bind with
> > alternatives (String,net.liftweb.util.Box[(scala.xml.NodeSeq) =>
> > scala.xml.NodeSeq],net.liftweb.util.Box[(scala.xml.PrefixedAttribute)
> > =>
> > scala.xml.MetaData
> > ],scala.xml.NodeSeq,net.liftweb.util.Helpers.BindParam*)
> > scala.xml.NodeSeq 
> > (String,scala.xml.NodeSeq,net.liftweb.util.Helpers.BindParam*)
> > scala.xml.NodeSeq cannot be applied to
> > (java.lang.String
> > ,scala.xml.NodeSeq
> > ,java.lang.String
> > ,java.lang.String
> > ,net.liftweb.util.Helpers.BindParam
> > ,net.liftweb.util.Helpers.BindParam)
> >      bind("producto", xhtml,
> >      ^
> > one error found
>
> > What's wrong?
>
> > On Sep 8, 7:13 pm, Ross Mellgren  wrote:
> >> Well it depends on precisely what you want. If you want your snippet
> >> to become empty if the product is not there, try:
>
> >> productBox.map(product => {
> >>    bind("product", ns, ...)
>
> >> }).openOr(NodeSeq.Empty)
>
> >> If you want only certain bind positions empty, do the same thing
> >> inside the bind:
>
> >> bind("proudct", ns,
> >>       "field" -> productBox.map(p => Text(p.field.toString)).openOr
> >> (NodeSeq.Empty),
> >>       ...)
>
> >> map is of course just one of the (simpler) operations you can do with
> >> a Box, there's more complicated stuff if you need other variants.
>
> >> -Ross
>
> >> On Sep 8, 2009, at 3:06 PM, José María wrote:
>
> >>> Hi.
>
> >>> Boxes are giving me a hard time.
>
> >>> Say you have a model of a Product.
>
> >>> If I've a snippet that retrieves a Product from the DB:
>
> >>> val product : Box[Product] = Product.find(2)
>
> >>> And now I want to bind "product" with bind(),  product is a Box  
> >>> and it
> >>> can be empty, how can I bind something that doesn't exists? You have
> >>> to return a NodeSeq in a snippet. What should my code must do?
>
> >>> Best regards.
>
>
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: Box and bind

2009-09-08 Thread Ross Mellgren

So that doesn't seem to be a box-related thing so much as a bind  
argument related thing, probably because you have a precedence  
problem... try:

producto.map(product =>
   bind("product", xhtml,
"url_enlace" -> ("/product/" + product.id.toString),
   )
).openOr(NodeSeq.Empty)

Also, FYI, you have val product = Product.find(id), but then map over  
producto. I presume either producto is coming from somewhere else (and  
val product is being shadowed inside the map) or that you pasted not  
exactly what you're compiling.

-Ross


On Sep 8, 2009, at 3:25 PM, José María wrote:

>
> That's my code:
>
>val product = Product.find(id)
>
>
>producto.map(product =>
>  bind("product", xhtml,
>   "url_enlace" --> "/product/" + product.id.toString ,
>  )
>   ).openOr(NodeSeq.Empty)
>}
>
> and I get this error:
>
> [INFO] use java command with args in file forced : false
> /usr/home/josemaria/src/lift/helloworld/src/main/scala/demo/ 
> helloworld/
> snippet/Portada.scala:55: error: overloaded method value bind with
> alternatives (String,net.liftweb.util.Box[(scala.xml.NodeSeq) =>
> scala.xml.NodeSeq],net.liftweb.util.Box[(scala.xml.PrefixedAttribute)
> =>
> scala.xml.MetaData 
> ],scala.xml.NodeSeq,net.liftweb.util.Helpers.BindParam*)
> scala.xml.NodeSeq 
> (String,scala.xml.NodeSeq,net.liftweb.util.Helpers.BindParam*)
> scala.xml.NodeSeq cannot be applied to
> (java.lang.String 
> ,scala.xml.NodeSeq 
> ,java.lang.String 
> ,java.lang.String 
> ,net.liftweb.util.Helpers.BindParam 
> ,net.liftweb.util.Helpers.BindParam)
>  bind("producto", xhtml,
>  ^
> one error found
>
>
>
> What's wrong?
>
>
>
> On Sep 8, 7:13 pm, Ross Mellgren  wrote:
>> Well it depends on precisely what you want. If you want your snippet
>> to become empty if the product is not there, try:
>>
>> productBox.map(product => {
>>bind("product", ns, ...)
>>
>> }).openOr(NodeSeq.Empty)
>>
>> If you want only certain bind positions empty, do the same thing
>> inside the bind:
>>
>> bind("proudct", ns,
>>   "field" -> productBox.map(p => Text(p.field.toString)).openOr
>> (NodeSeq.Empty),
>>   ...)
>>
>> map is of course just one of the (simpler) operations you can do with
>> a Box, there's more complicated stuff if you need other variants.
>>
>> -Ross
>>
>> On Sep 8, 2009, at 3:06 PM, José María wrote:
>>
>>
>>
>>> Hi.
>>
>>> Boxes are giving me a hard time.
>>
>>> Say you have a model of a Product.
>>
>>> If I've a snippet that retrieves a Product from the DB:
>>
>>> val product : Box[Product] = Product.find(2)
>>
>>> And now I want to bind "product" with bind(),  product is a Box  
>>> and it
>>> can be empty, how can I bind something that doesn't exists? You have
>>> to return a NodeSeq in a snippet. What should my code must do?
>>
>>> Best regards.
>>
>>
> >


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: Box and bind

2009-09-08 Thread José María

That's my code:

val product = Product.find(id)


producto.map(product =>
  bind("product", xhtml,
   "url_enlace" --> "/product/" + product.id.toString ,
  )
   ).openOr(NodeSeq.Empty)
}

and I get this error:

[INFO] use java command with args in file forced : false
/usr/home/josemaria/src/lift/helloworld/src/main/scala/demo/helloworld/
snippet/Portada.scala:55: error: overloaded method value bind with
alternatives (String,net.liftweb.util.Box[(scala.xml.NodeSeq) =>
scala.xml.NodeSeq],net.liftweb.util.Box[(scala.xml.PrefixedAttribute)
=>
scala.xml.MetaData],scala.xml.NodeSeq,net.liftweb.util.Helpers.BindParam*)
scala.xml.NodeSeq 
(String,scala.xml.NodeSeq,net.liftweb.util.Helpers.BindParam*)
scala.xml.NodeSeq cannot be applied to
(java.lang.String,scala.xml.NodeSeq,java.lang.String,java.lang.String,net.liftweb.util.Helpers.BindParam,net.liftweb.util.Helpers.BindParam)
  bind("producto", xhtml,
  ^
one error found



What's wrong?



On Sep 8, 7:13 pm, Ross Mellgren  wrote:
> Well it depends on precisely what you want. If you want your snippet  
> to become empty if the product is not there, try:
>
> productBox.map(product => {
>    bind("product", ns, ...)
>
> }).openOr(NodeSeq.Empty)
>
> If you want only certain bind positions empty, do the same thing  
> inside the bind:
>
> bind("proudct", ns,
>       "field" -> productBox.map(p => Text(p.field.toString)).openOr
> (NodeSeq.Empty),
>       ...)
>
> map is of course just one of the (simpler) operations you can do with  
> a Box, there's more complicated stuff if you need other variants.
>
> -Ross
>
> On Sep 8, 2009, at 3:06 PM, José María wrote:
>
>
>
> > Hi.
>
> > Boxes are giving me a hard time.
>
> > Say you have a model of a Product.
>
> > If I've a snippet that retrieves a Product from the DB:
>
> > val product : Box[Product] = Product.find(2)
>
> > And now I want to bind "product" with bind(),  product is a Box and it
> > can be empty, how can I bind something that doesn't exists? You have
> > to return a NodeSeq in a snippet. What should my code must do?
>
> > Best regards.
>
>
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: Box and bind

2009-09-08 Thread Ross Mellgren

Well it depends on precisely what you want. If you want your snippet  
to become empty if the product is not there, try:

productBox.map(product => {
   bind("product", ns, ...)
}).openOr(NodeSeq.Empty)

If you want only certain bind positions empty, do the same thing  
inside the bind:

bind("proudct", ns,
  "field" -> productBox.map(p => Text(p.field.toString)).openOr 
(NodeSeq.Empty),
  ...)

map is of course just one of the (simpler) operations you can do with  
a Box, there's more complicated stuff if you need other variants.

-Ross

On Sep 8, 2009, at 3:06 PM, José María wrote:

>
> Hi.
>
> Boxes are giving me a hard time.
>
> Say you have a model of a Product.
>
> If I've a snippet that retrieves a Product from the DB:
>
> val product : Box[Product] = Product.find(2)
>
> And now I want to bind "product" with bind(),  product is a Box and it
> can be empty, how can I bind something that doesn't exists? You have
> to return a NodeSeq in a snippet. What should my code must do?
>
> Best regards.
> >


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: Box and bind

2009-09-08 Thread Naftoli Gugenheim

There should be implicits that allow you to bind to a Box of a NodeSeq, so you 
can bind to prodBox.map(_.toForm). Otherwise bind to 
prodBox.map(_.toForm).openOr(NodeSeq.Empty) etc.

-
José María wrote:


Hi.

Boxes are giving me a hard time.

Say you have a model of a Product.

If I've a snippet that retrieves a Product from the DB:

val product : Box[Product] = Product.find(2)

And now I want to bind "product" with bind(),  product is a Box and it
can be empty, how can I bind something that doesn't exists? You have
to return a NodeSeq in a snippet. What should my code must do?

Best regards.


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: Some XML special chars rendered by lift, others not in 1.1-SNAPSHOT

2009-09-08 Thread jon

Aha,

It is a header problem.  If the charset is specified in the content-
type IE will pick the right encoding.  I added the following to my
Boot (I already had LiftRules.useXhtmlMimeType = false):

LiftRules.determineContentType = {
case _ => "text/html; charset=utf-8"
 }

Maybe this should be the default?

Thanks!

On Sep 8, 2:45 pm, David Pollak  wrote:
> On Tue, Sep 8, 2009 at 10:37 AM, jon  wrote:
>
> > Ah, IE7 seems to be confused about the character encoding of the
> > page.  When the encoding is set to "Auto Select" it chooses "Western
> > European (Windows)" and the © displays as  Â©.  If I turn off "Auto
> > Select" and manually set to "Unicode (UTF-8)" it displays correctly.
>
> I wonder if this is a header issue... I'll put this on my to do list to
> investigate.
>
> Although, I bet Tim has something to say about it.
>
>
>
>
>
>
>
> > I have LiftRules.early.append(makeUtf8) in Boot.  And the page
> > includes ""
>
> > Any ideas?
>
> > Thanks,
>
> > Jon
>
> > On Sep 8, 9:26 am, David Pollak  wrote:
> > > On Mon, Sep 7, 2009 at 11:38 PM, jon  wrote:
>
> > > > Hi,
>
> > > > I've noticed that some special char xml tags are being interpreted by
> > > > lift rather than passing through to the browser.
>
> > > > source code in my template:
> > > > 
> > > >          &
> > > >          ©
> > > >          "
> > > >          »
> > > >          <
> > > >          >
> > > > 
>
> > > > result from curlhttp://localhost:8080/
> > > >    
> > > >          &
> > > >          ©
> > > >          "
> > > >          »
> > > >          <
> > > >          >
> > > >    
>
> > > > The rendered characters are problematic in IE7.
>
> > > Why?
>
> > > >  A fix or workaround
> > > > would be much appreciated.
>
> > > The raw XHTML is valid.  Lift is yielding non-ASCII characters, but they
> > are
> > > UTF-8 encoded and should be correctly rendered on all browsers.  I have
> > > never seen a problem with IE6 or IE7 (I have not tested in IE8)
>
> > > > Thanks,
>
> > > > - Jon
>
> > > --
> > > Lift, the simply functional web frameworkhttp://liftweb.net
> > > Beginning Scalahttp://www.apress.com/book/view/1430219890
> > > Follow me:http://twitter.com/dpp
> > > Git some:http://github.com/dpp
>
> --
> Lift, the simply functional web frameworkhttp://liftweb.net
> Beginning Scalahttp://www.apress.com/book/view/1430219890
> Follow me:http://twitter.com/dpp
> Git some:http://github.com/dpp
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Box and bind

2009-09-08 Thread José María

Hi.

Boxes are giving me a hard time.

Say you have a model of a Product.

If I've a snippet that retrieves a Product from the DB:

val product : Box[Product] = Product.find(2)

And now I want to bind "product" with bind(),  product is a Box and it
can be empty, how can I bind something that doesn't exists? You have
to return a NodeSeq in a snippet. What should my code must do?

Best regards.
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: how do you set system properties in lift?

2009-09-08 Thread jon

Note that if you're on 1.1-SNAPSHOT you can set customProperties on
the Mailer which would allow to use some other configuration mechanism
than system property (like Props or Configgy).

val props = Map[String,String]("mail.smtp.host" -> "...")

Mailer.customProperties = props
Mailer.authenticator = Full(new Authenticator(){
override def getPasswordAuthentication = new
PasswordAuthentication("f...@foo.com","bar")
})


Mailer.buildProps would return the Properties the Mailer is currently
using.

- Jon

On Sep 8, 2:29 pm, Tim Nelson  wrote:
> You need to set system properties:
>
> System.setProperty("mail.smtp.starttls.enable","true");
>         System.setProperty("mail.smtp.host", host)
>         System.setProperty("mail.smtp.port", "587")
>         System.setProperty("mail.smtp.auth", "true")
>         Mailer.authenticator = Full(new Authenticator {
>             override def getPasswordAuthentication =
>                 new PasswordAuthentication(user, password)
>         })
>
> Tim
>
>
>
> On Tue, Sep 8, 2009 at 12:03 PM, george  wrote:
>
> > say I wanted to change the port / host that the Mailer uses.
>
> > how would I go about that?
>
> > thanks
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: Some XML special chars rendered by lift, others not in 1.1-SNAPSHOT

2009-09-08 Thread David Pollak
On Tue, Sep 8, 2009 at 10:37 AM, jon  wrote:

>
> Ah, IE7 seems to be confused about the character encoding of the
> page.  When the encoding is set to "Auto Select" it chooses "Western
> European (Windows)" and the © displays as  ©.  If I turn off "Auto
> Select" and manually set to "Unicode (UTF-8)" it displays correctly.
>

I wonder if this is a header issue... I'll put this on my to do list to
investigate.

Although, I bet Tim has something to say about it.


>
> I have LiftRules.early.append(makeUtf8) in Boot.  And the page
> includes ""
>
> Any ideas?
>
> Thanks,
>
> Jon
>
>
> On Sep 8, 9:26 am, David Pollak  wrote:
> > On Mon, Sep 7, 2009 at 11:38 PM, jon  wrote:
> >
> > > Hi,
> >
> > > I've noticed that some special char xml tags are being interpreted by
> > > lift rather than passing through to the browser.
> >
> > > source code in my template:
> > > 
> > >  &
> > >  ©
> > >  "
> > >  »
> > >  <
> > >  >
> > > 
> >
> > > result from curlhttp://localhost:8080/
> > >
> > >  &
> > >  ©
> > >  "
> > >  »
> > >  <
> > >  >
> > >
> >
> > > The rendered characters are problematic in IE7.
> >
> > Why?
> >
> > >  A fix or workaround
> > > would be much appreciated.
> >
> > The raw XHTML is valid.  Lift is yielding non-ASCII characters, but they
> are
> > UTF-8 encoded and should be correctly rendered on all browsers.  I have
> > never seen a problem with IE6 or IE7 (I have not tested in IE8)
> >
> >
> >
> > > Thanks,
> >
> > > - Jon
> >
> > --
> > Lift, the simply functional web frameworkhttp://liftweb.net
> > Beginning Scalahttp://www.apress.com/book/view/1430219890
> > Follow me:http://twitter.com/dpp
> > Git some:http://github.com/dpp
> >
>


-- 
Lift, the simply functional web framework http://liftweb.net
Beginning Scala http://www.apress.com/book/view/1430219890
Follow me: http://twitter.com/dpp
Git some: http://github.com/dpp

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: how do you set system properties in lift?

2009-09-08 Thread Tim Nelson
You need to set system properties:

System.setProperty("mail.smtp.starttls.enable","true");
System.setProperty("mail.smtp.host", host)
System.setProperty("mail.smtp.port", "587")
System.setProperty("mail.smtp.auth", "true")
Mailer.authenticator = Full(new Authenticator {
override def getPasswordAuthentication =
new PasswordAuthentication(user, password)
})

Tim

On Tue, Sep 8, 2009 at 12:03 PM, george  wrote:

>
> say I wanted to change the port / host that the Mailer uses.
>
> how would I go about that?
>
> thanks
> >
>

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: Some XML special chars rendered by lift, others not in 1.1-SNAPSHOT

2009-09-08 Thread jon

Ah, IE7 seems to be confused about the character encoding of the
page.  When the encoding is set to "Auto Select" it chooses "Western
European (Windows)" and the © displays as  ©.  If I turn off "Auto
Select" and manually set to "Unicode (UTF-8)" it displays correctly.

I have LiftRules.early.append(makeUtf8) in Boot.  And the page
includes ""

Any ideas?

Thanks,

Jon


On Sep 8, 9:26 am, David Pollak  wrote:
> On Mon, Sep 7, 2009 at 11:38 PM, jon  wrote:
>
> > Hi,
>
> > I've noticed that some special char xml tags are being interpreted by
> > lift rather than passing through to the browser.
>
> > source code in my template:
> > 
> >          &
> >          ©
> >          "
> >          »
> >          <
> >          >
> > 
>
> > result from curlhttp://localhost:8080/
> >    
> >          &
> >          ©
> >          "
> >          »
> >          <
> >          >
> >    
>
> > The rendered characters are problematic in IE7.
>
> Why?
>
> >  A fix or workaround
> > would be much appreciated.
>
> The raw XHTML is valid.  Lift is yielding non-ASCII characters, but they are
> UTF-8 encoded and should be correctly rendered on all browsers.  I have
> never seen a problem with IE6 or IE7 (I have not tested in IE8)
>
>
>
> > Thanks,
>
> > - Jon
>
> --
> Lift, the simply functional web frameworkhttp://liftweb.net
> Beginning Scalahttp://www.apress.com/book/view/1430219890
> Follow me:http://twitter.com/dpp
> Git some:http://github.com/dpp
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: setting user-agent header with Databinder

2009-09-08 Thread Jack Widman
Right. I will try to keep to the topic :)
I actually found him and he quickly answered me.

On Tue, Sep 8, 2009 at 12:24 PM, David Pollak  wrote:

> Jack,
> I'm not sure where N8han (the author of Databinder) hangs out, but it's not
> on the Lift list.  :-(
>
> Sorry.
>
> David
>
>
> On Tue, Sep 8, 2009 at 8:58 AM, jack  wrote:
>
>>
>> Please forgive me for including so much code but I have an important
>> demo fast approaching and I'm kind of in a bind. I am using
>> Databinders Dispatch http library which is a wrapper around Javas
>> HttpClient library. I have included the Http class below. Does anyone
>> see how to set the user-agent header. Once again I apologize and would
>> be much obliged for any help.
>>
>> import collection.Map
>> import collection.immutable.{Map => IMap}
>> import util.DynamicVariable
>> import java.io.
>> {InputStream,OutputStream,BufferedInputStream,BufferedOutputStream}
>> import java.net.URI
>> import java.util.zip.GZIPInputStream
>>
>> import org.apache.http._
>> import org.apache.http.client._
>> import org.apache.http.impl.client.{DefaultHttpClient,
>> BasicCredentialsProvider}
>> import org.apache.http.client.methods._
>> import org.apache.http.client.entity.UrlEncodedFormEntity
>> import org.apache.http.client.utils.URLEncodedUtils
>>
>> import org.apache.http.entity.StringEntity
>> import org.apache.http.message.BasicNameValuePair
>> import org.apache.http.protocol.HTTP.UTF_8
>> import org.apache.http.params.{HttpProtocolParams, BasicHttpParams}
>> import org.apache.http.util.EntityUtils
>> import org.apache.http.auth.{AuthScope, UsernamePasswordCredentials,
>> Credentials}
>>
>> case class StatusCode(code: Int, contents:String)
>>  extends Exception("Exceptional resoponse code: " + code + "\n" +
>> contents)
>>
>> /** Http access point. Standard instances to be used by a single
>> thread. */
>> class Http {
>>  val credentials = new DynamicVariable[Option[(AuthScope,
>> Credentials)]](None)
>>  val client = new ConfiguredHttpClient
>>
>>  def credentialsProvider = new BasicCredentialsProvider {
>>override def getCredentials(scope: AuthScope) = null
>>  }
>>
>> /**  /** Info Logger for this instance, default returns Connfiggy if
>> on classpath else console logger. */
>>  lazy val log: Logger = try {
>>new Logger {
>>  val delegate = net.lag.logging.Logger.get
>>  def info(msg: String, items: Any*) { delegate.info(msg, items:
>> _*) }
>>}
>>  } catch {
>>case e: NoClassDefFoundError => new Logger {
>>  def info(msg: String, items: Any*) {
>>println("INF: [console logger] dispatch: " + msg.format(items:
>> _*))
>>  }
>>}
>>  }
>>  **/
>>  /** Execute method for the given host, with logging. */
>>  def execute(host: HttpHost, req: HttpUriRequest) = {
>>//log.info("%s %s%s", req.getMethod, host, req.getURI)
>>client.execute(host, req)
>>  }
>>  /** Execute for given optional parametrs, with logging. Creates
>> local scope for credentials. */
>>  val execute: (Option[HttpHost], Option[Credentials], HttpUriRequest)
>> => HttpResponse = {
>>case (Some(host), Some(creds), req) =>
>>  client.credentials.withValue(Some((new AuthScope
>> (host.getHostName, host.getPort), creds)))(execute(host, req))
>>case (None, Some(creds), _) => error("Credentials specified
>> without explicit host")
>>case (Some(host), _, req) => execute(host, req)
>>case (_, _, req) =>
>>  //log.info("%s %s", req.getMethod, req.getURI)
>>  client.execute(req)
>>  }
>>  /** Execute full request-response handler. */
>>  def x[T](hand: Handler[T]): T = x(hand.request)(hand.block)
>>  /** Execute request and handle response codes, response, and entity
>> in block */
>>  def x [T](req: Request)(block: Handler.F[T]) = {
>>val res = execute(req.host, req.creds, req.req)
>>val ent = res.getEntity match {
>>  case null => None
>>  case ent => Some(ent)
>>}
>>try { block(res.getStatusLine.getStatusCode, res, ent) }
>>finally { ent foreach (_.consumeContent) }
>>  }
>>  /** Apply Response Handler if reponse code returns true from chk. */
>>  def when[T](chk: Int => Boolean)(hand: Handler[T]) = x(hand.request)
>> {
>>case (code, res, ent) if chk(code) => hand.block(code, res, ent)
>>case (code, _, Some(ent)) => throw StatusCode(code,
>> EntityUtils.toString(ent, UTF_8))
>>case (code, _, _) => throw StatusCode(code, "[no entity]")
>>  }
>>  /** Apply a custom block in addition to predefined response Handler.
>> */
>>  def also[A,B](hand: Handler[B])(block: Handler.F[A]) =
>>x(hand.request) { (code, res, ent) => ( hand.block(code, res,
>> ent), block(code, res, ent) ) }
>>
>>  /** Apply handler block when response code is 200 - 204 */
>>  def apply[T](hand: Handler[T]) = (this when {code => (200 to 204)
>> contains code})(hand)
>> }
>>
>> /** Nil request, useful to kick off a descriptors that don't have a
>> factory. */
>> object /\ extends Request(None, None, Nil)
>>
>> /* Factory for reques

[Lift] how do you set system properties in lift?

2009-09-08 Thread george

say I wanted to change the port / host that the Mailer uses.

how would I go about that?

thanks
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: setting user-agent header with Databinder

2009-09-08 Thread Jack Widman
You are right. I will fine tune my determine which is a good question to ask
mechanism :)

On Tue, Sep 8, 2009 at 12:54 PM, Timothy Perrett wrote:

>
> IMHO, you'd probably get better traction with such questions in a
> wider audience on the main scala-user list over at EPFL...
>
> Cheers, Tim
>
>
> On 8 Sep 2009, at 17:26, Jack Widman wrote:
>
> > Right. I will try to keep to the topic :)
> >
> > I actually found him and he quickly answered me.
> >
> > On Tue, Sep 8, 2009 at 12:24 PM, David Pollak <
> feeder.of.the.be...@gmail.com
> > > wrote:
> > Jack,
> >
> > I'm not sure where N8han (the author of Databinder) hangs out, but
> > it's not on the Lift list.  :-(
> >
> > Sorry.
> >
> > David
> >
> >
> > On Tue, Sep 8, 2009 at 8:58 AM, jack  wrote:
> >
> > Please forgive me for including so much code but I have an important
> > demo fast approaching and I'm kind of in a bind. I am using
> > Databinders Dispatch http library which is a wrapper around Javas
> > HttpClient library. I have included the Http class below. Does anyone
> > see how to set the user-agent header. Once again I apologize and would
> > be much obliged for any help.
> >
> > import collection.Map
> > import collection.immutable.{Map => IMap}
> > import util.DynamicVariable
> > import java.io.
> > {InputStream,OutputStream,BufferedInputStream,BufferedOutputStream}
> > import java.net.URI
> > import java.util.zip.GZIPInputStream
> >
> > import org.apache.http._
> > import org.apache.http.client._
> > import org.apache.http.impl.client.{DefaultHttpClient,
> > BasicCredentialsProvider}
> > import org.apache.http.client.methods._
> > import org.apache.http.client.entity.UrlEncodedFormEntity
> > import org.apache.http.client.utils.URLEncodedUtils
> >
> > import org.apache.http.entity.StringEntity
> > import org.apache.http.message.BasicNameValuePair
> > import org.apache.http.protocol.HTTP.UTF_8
> > import org.apache.http.params.{HttpProtocolParams, BasicHttpParams}
> > import org.apache.http.util.EntityUtils
> > import org.apache.http.auth.{AuthScope, UsernamePasswordCredentials,
> > Credentials}
> >
> > case class StatusCode(code: Int, contents:String)
> >  extends Exception("Exceptional resoponse code: " + code + "\n" +
> > contents)
> >
> > /** Http access point. Standard instances to be used by a single
> > thread. */
> > class Http {
> >  val credentials = new DynamicVariable[Option[(AuthScope,
> > Credentials)]](None)
> >  val client = new ConfiguredHttpClient
> >
> >  def credentialsProvider = new BasicCredentialsProvider {
> >override def getCredentials(scope: AuthScope) = null
> >  }
> >
> > /**  /** Info Logger for this instance, default returns Connfiggy if
> > on classpath else console logger. */
> >  lazy val log: Logger = try {
> >new Logger {
> >  val delegate = net.lag.logging.Logger.get
> >  def info(msg: String, items: Any*) { delegate.info(msg, items:
> > _*) }
> >}
> >  } catch {
> >case e: NoClassDefFoundError => new Logger {
> >  def info(msg: String, items: Any*) {
> >println("INF: [console logger] dispatch: " + msg.format(items:
> > _*))
> >  }
> >}
> >  }
> >  **/
> >  /** Execute method for the given host, with logging. */
> >  def execute(host: HttpHost, req: HttpUriRequest) = {
> >//log.info("%s %s%s", req.getMethod, host, req.getURI)
> >client.execute(host, req)
> >  }
> >  /** Execute for given optional parametrs, with logging. Creates
> > local scope for credentials. */
> >  val execute: (Option[HttpHost], Option[Credentials], HttpUriRequest)
> > => HttpResponse = {
> >case (Some(host), Some(creds), req) =>
> >  client.credentials.withValue(Some((new AuthScope
> > (host.getHostName, host.getPort), creds)))(execute(host, req))
> >case (None, Some(creds), _) => error("Credentials specified
> > without explicit host")
> >case (Some(host), _, req) => execute(host, req)
> >case (_, _, req) =>
> >  //log.info("%s %s", req.getMethod, req.getURI)
> >  client.execute(req)
> >  }
> >  /** Execute full request-response handler. */
> >  def x[T](hand: Handler[T]): T = x(hand.request)(hand.block)
> >  /** Execute request and handle response codes, response, and entity
> > in block */
> >  def x [T](req: Request)(block: Handler.F[T]) = {
> >val res = execute(req.host, req.creds, req.req)
> >val ent = res.getEntity match {
> >  case null => None
> >  case ent => Some(ent)
> >}
> >try { block(res.getStatusLine.getStatusCode, res, ent) }
> >finally { ent foreach (_.consumeContent) }
> >  }
> >  /** Apply Response Handler if reponse code returns true from chk. */
> >  def when[T](chk: Int => Boolean)(hand: Handler[T]) = x(hand.request)
> > {
> >case (code, res, ent) if chk(code) => hand.block(code, res, ent)
> >case (code, _, Some(ent)) => throw StatusCode(code,
> > EntityUtils.toString(ent, UTF_8))
> >case (code, _, _) => throw StatusCode(code, "[no entity]")
> >  }
> >  /** Apply a custom block in additi

[Lift] Re: rewrite problem

2009-09-08 Thread David Pollak
On Tue, Sep 8, 2009 at 9:41 AM, night_stalker  wrote:

>
> Can't find
>
>   RewriteResponse.apply(List[String], Map[String, String], Boolean)
>
> in 1.0 API, is it a new feature?
>

It's probably a new feature in 1.1 to address the issue that you identified.

I recommend running against 1.1-M4 or SNAPSHOT.


>
> On Sep 8, 11:52 pm, David Pollak 
> wrote:
> > or:
> > LiftRules.rewrite.append {
> >  case RewriteRequest(ParsePath(List("post", id), _, _, _), _, _)
> > =>
> >RewriteResponse(List("post","show"), Map("id"->urlDecode(id)),
> *true*
> > )
> >}
> >
> > The true parameter stops the rewriting process so you don't get the
> infinite
> > loop.
>
> >
>


-- 
Lift, the simply functional web framework http://liftweb.net
Beginning Scala http://www.apress.com/book/view/1430219890
Follow me: http://twitter.com/dpp
Git some: http://github.com/dpp

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: Lift WebServices

2009-09-08 Thread David Pollak
Can you privately send me a zipped file containing your project (please
remove the target directory before sending).  I think there is something
very wrong, but can't diagnose it from the stack trace.

On Tue, Sep 8, 2009 at 9:43 AM, abruzzo  wrote:

>
> I'm trying to set up a simple web service using Lift v1.0. I've
> scoured
> across many examples but because of changes in the api's, none of them
> compile. I finally found an example of a dispatcher tha compiles but
> in the
> sample as in others the dispatcher is added in the boot method of the
> Boot
> class as follows:
>
>LiftRules.dispatch.prepend(RestApi.dispatch)
>
>
> This compiles fine however, upon startup I get the following stack:
>
> ERROR - Failed to Boot
> java.lang.IllegalStateException: Cannot modify after boot.
>at net.liftweb.http.RulesSeq$class.safe_$qmark(LiftRules.scala:885)
>at net.liftweb.http.RulesSeq$class.prepend(LiftRules.scala:892)
>at net.liftweb.http.RulesSeq$$anon$3.prepend(LiftRules.scala:872)
>at net.liftweb.http.LiftFilter.preBoot(LiftServlet.scala:581)
>at net.liftweb.http.LiftFilter.bootLift(LiftServlet.scala:572)
>at net.liftweb.http.LiftFilter.init(LiftServlet.scala:548)
>at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:
> 97)
>at org.mortbay.component.AbstractLifeCycle.start
> (AbstractLifeCycle.java:50)
>at
> org.mortbay.jetty.servlet.ServletHandler.initialize
> (ServletHandler.java:653)
>at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)
>at
> org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:
> 1239)
>at
> org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:
> 517)
>at
> org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:
> 466)
>at
> org.mortbay.jetty.plugin.Jetty6PluginWebAppContext.doStart
> (Jetty6PluginWebAppContext.java:124)
>at org.mortbay.component.AbstractLifeCycle.start
> (AbstractLifeCycle.java:50)
>at
> org.mortbay.jetty.handler.HandlerCollection.doStart
> (HandlerCollection.java:152)
>at
> org.mortbay.jetty.handler.ContextHandlerCollection.doStart
> (ContextHandlerCollection.java:156)
>at org.mortbay.component.AbstractLifeCycle.start
> (AbstractLifeCycle.java:50)
>at
> org.mortbay.jetty.handler.HandlerCollection.doStart
> (HandlerCollection.java:152)
>at org.mortbay.component.AbstractLifeCycle.start
> (AbstractLifeCycle.java:50)
>at
> org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:
> 130)
>at org.mortbay.jetty.Server.doStart(Server.java:224)
>at org.mortbay.component.AbstractLifeCycle.start
> (AbstractLifeCycle.java:50)
>at
> org.mortbay.jetty.plugin.Jetty6PluginServer.start
> (Jetty6PluginServer.java:132)
>at
> org.mortbay.jetty.plugin.AbstractJettyMojo.startJetty
> (AbstractJettyMojo.java:441)
>at
> org.mortbay.jetty.plugin.AbstractJettyMojo.execute
> (AbstractJettyMojo.java:383)
>at
> org.mortbay.jetty.plugin.AbstractJettyRunMojo.execute
> (AbstractJettyRunMojo.java:210)
>at
> org.mortbay.jetty.plugin.Jetty6RunMojo.execute(Jetty6RunMojo.java:
> 184)
>at
> org.apache.maven.plugin.DefaultPluginManager.executeMojo
> (DefaultPluginManager.java:451)
>at
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals
> (DefaultLifecycleExecutor.java:558)
>at
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandaloneGoal
> (DefaultLifecycleExecutor.java:512)
>at
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal
> (DefaultLifecycleExecutor.java:482)
>at
>
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures
> (DefaultLifecycleExecutor.java:330)
>at
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments
> (DefaultLifecycleExecutor.java:291)
>at
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute
> (DefaultLifecycleExecutor.java:142)
>at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:336)
>at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:129)
>at org.apache.maven.cli.MavenCli.main(MavenCli.java:287)
>at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>at
> sun.reflect.NativeMethodAccessorImpl.invoke
> (NativeMethodAccessorImpl.java:39)
>at
> sun.reflect.DelegatingMethodAccessorImpl.invoke
> (DelegatingMethodAccessorImpl.java:25)
>at java.lang.reflect.Method.invoke(Method.java:597)
>at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:
> 315)
>at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
>at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:
> 430)
>at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
> 2009-09-07 11:57:17.823::INFO:  Started
> selectchann

[Lift] Re: setting user-agent header with Databinder

2009-09-08 Thread Timothy Perrett

IMHO, you'd probably get better traction with such questions in a  
wider audience on the main scala-user list over at EPFL...

Cheers, Tim


On 8 Sep 2009, at 17:26, Jack Widman wrote:

> Right. I will try to keep to the topic :)
>
> I actually found him and he quickly answered me.
>
> On Tue, Sep 8, 2009 at 12:24 PM, David Pollak  > wrote:
> Jack,
>
> I'm not sure where N8han (the author of Databinder) hangs out, but  
> it's not on the Lift list.  :-(
>
> Sorry.
>
> David
>
>
> On Tue, Sep 8, 2009 at 8:58 AM, jack  wrote:
>
> Please forgive me for including so much code but I have an important
> demo fast approaching and I'm kind of in a bind. I am using
> Databinders Dispatch http library which is a wrapper around Javas
> HttpClient library. I have included the Http class below. Does anyone
> see how to set the user-agent header. Once again I apologize and would
> be much obliged for any help.
>
> import collection.Map
> import collection.immutable.{Map => IMap}
> import util.DynamicVariable
> import java.io.
> {InputStream,OutputStream,BufferedInputStream,BufferedOutputStream}
> import java.net.URI
> import java.util.zip.GZIPInputStream
>
> import org.apache.http._
> import org.apache.http.client._
> import org.apache.http.impl.client.{DefaultHttpClient,
> BasicCredentialsProvider}
> import org.apache.http.client.methods._
> import org.apache.http.client.entity.UrlEncodedFormEntity
> import org.apache.http.client.utils.URLEncodedUtils
>
> import org.apache.http.entity.StringEntity
> import org.apache.http.message.BasicNameValuePair
> import org.apache.http.protocol.HTTP.UTF_8
> import org.apache.http.params.{HttpProtocolParams, BasicHttpParams}
> import org.apache.http.util.EntityUtils
> import org.apache.http.auth.{AuthScope, UsernamePasswordCredentials,
> Credentials}
>
> case class StatusCode(code: Int, contents:String)
>  extends Exception("Exceptional resoponse code: " + code + "\n" +
> contents)
>
> /** Http access point. Standard instances to be used by a single
> thread. */
> class Http {
>  val credentials = new DynamicVariable[Option[(AuthScope,
> Credentials)]](None)
>  val client = new ConfiguredHttpClient
>
>  def credentialsProvider = new BasicCredentialsProvider {
>override def getCredentials(scope: AuthScope) = null
>  }
>
> /**  /** Info Logger for this instance, default returns Connfiggy if
> on classpath else console logger. */
>  lazy val log: Logger = try {
>new Logger {
>  val delegate = net.lag.logging.Logger.get
>  def info(msg: String, items: Any*) { delegate.info(msg, items:
> _*) }
>}
>  } catch {
>case e: NoClassDefFoundError => new Logger {
>  def info(msg: String, items: Any*) {
>println("INF: [console logger] dispatch: " + msg.format(items:
> _*))
>  }
>}
>  }
>  **/
>  /** Execute method for the given host, with logging. */
>  def execute(host: HttpHost, req: HttpUriRequest) = {
>//log.info("%s %s%s", req.getMethod, host, req.getURI)
>client.execute(host, req)
>  }
>  /** Execute for given optional parametrs, with logging. Creates
> local scope for credentials. */
>  val execute: (Option[HttpHost], Option[Credentials], HttpUriRequest)
> => HttpResponse = {
>case (Some(host), Some(creds), req) =>
>  client.credentials.withValue(Some((new AuthScope
> (host.getHostName, host.getPort), creds)))(execute(host, req))
>case (None, Some(creds), _) => error("Credentials specified
> without explicit host")
>case (Some(host), _, req) => execute(host, req)
>case (_, _, req) =>
>  //log.info("%s %s", req.getMethod, req.getURI)
>  client.execute(req)
>  }
>  /** Execute full request-response handler. */
>  def x[T](hand: Handler[T]): T = x(hand.request)(hand.block)
>  /** Execute request and handle response codes, response, and entity
> in block */
>  def x [T](req: Request)(block: Handler.F[T]) = {
>val res = execute(req.host, req.creds, req.req)
>val ent = res.getEntity match {
>  case null => None
>  case ent => Some(ent)
>}
>try { block(res.getStatusLine.getStatusCode, res, ent) }
>finally { ent foreach (_.consumeContent) }
>  }
>  /** Apply Response Handler if reponse code returns true from chk. */
>  def when[T](chk: Int => Boolean)(hand: Handler[T]) = x(hand.request)
> {
>case (code, res, ent) if chk(code) => hand.block(code, res, ent)
>case (code, _, Some(ent)) => throw StatusCode(code,
> EntityUtils.toString(ent, UTF_8))
>case (code, _, _) => throw StatusCode(code, "[no entity]")
>  }
>  /** Apply a custom block in addition to predefined response Handler.
> */
>  def also[A,B](hand: Handler[B])(block: Handler.F[A]) =
>x(hand.request) { (code, res, ent) => ( hand.block(code, res,
> ent), block(code, res, ent) ) }
>
>  /** Apply handler block when response code is 200 - 204 */
>  def apply[T](hand: Handler[T]) = (this when {code => (200 to 204)
> contains code})(hand)
> }
>
> /** Nil request, useful to kick off a descriptors that don't have a
> fa

[Lift] Re: Crazy idea for lift's mega proto user: admin panel.

2009-09-08 Thread Timothy Perrett

Agreed - cant help but feel this is a little gimmicky and not really  
part of lifts core values; that said, as Marius points out this might  
work as a widget.

Cheers, Tim


On 8 Sep 2009, at 11:36, marius d. wrote:

>
> Nice thoughts but personally I don't think this should be part of Lift
> core framework. However an admin panel could be provided via a lift
> widget and would be pretty interesting thing to have.
>
> Br's,
> Marius
>
> On Sep 8, 2:16 am, DFectuoso  wrote:
>> I was thinking about how wonderful it is to get a login/register/
>> forgotPassword functionality with mega proto user and how it could
>> become even better with a good tool for creating an admin section.
>>
>> I'm just adding the idea here so maybe if other people find value it
>> could be considered for development(or probably it already is, i  
>> don't
>> know).
>>
>> Adding an admin panel to mega proto user where the moderators/admins
>> could change some options(like the way a user is validated, if gzip  
>> is
>> enabled, etc) would be great for the end users of our apps, since it
>> would be easier to change and maintain the site.
>>
>> Being a administrator at a Invision Power Board forum and having a
>> couple of wordpress blogs, i see a lot of potential on this as a  
>> admin/
>> dev tool! Listing some of the things that i can imagine in this panel
>> are:
>>
>> -phpMyAdmin-type of DB admin(browse your data easily, remove/change/
>> add stuff to it without having to create a CRUD for each thing)
>> -execute queries
>> -List the actor(and comet actors) with possibility to kill/reset them
>> -Memory use analysis.
>> -Statistics of use(hits, referrals, etc)
>> -Options (any object/class/trait could have a val foo =
>> adminPanel.option("category","optionName","description",defaultValue,
>> otherValues[]) and be included in this place, of course the  
>> categories
>> could create different menus.
>> -User management(ban, authorize, give admin-rights).
>> -Simple to-do list that all admins can edit
>> -Log of errors/warnings/exceptions
>> -Css editor
>> -Easy-logo changer
>> -File Manager(upload your images and stuff here)
>> -String editor (you can change any default string from the
>> megaprotouser forms and the index?)
>>
>> Also, a very polemic(and i think bad idea, but its common to see this
>> in admin panels):
>> ->Installable plug-ins for this panel
>>
>> I know this seems like one step away from being a full blown CMS,
>> forum, blog, etc. But if its extensible while we are building an app,
>> it will be very useful for the different moments of development and
>> use.
>>
>> Of course i don't expect any of this to be done right now, i
>> understand there are a couple of integrations and bigger things going
>> on but i really wanted to brainstorm on this with you guys!
> >
>


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: CRUDify

2009-09-08 Thread Ollie

I've added a page with links to my posts 
http://wiki.github.com/dpp/liftweb/example-crudify-a-entity
.  I am just starting out with Lift and Scala but am happy to receive
any comments.

On Sep 8, 12:16 am, Randinn  wrote:
> I'll ask the author.
>
> On Sep 2, 3:49 am, David Pollak  wrote:
>
>
>
> > Good stuff!  Care to add a wiki page
> > that points to these blog posts?
>
> > On Tue, Sep 1, 2009 at 10:10 AM, Randinn  wrote:
>
> > > Here are a couple of good posts on seting up CRUDify, I thought
> > > initiates like myself might benefit.
>
> > >http://neuralmonkey.blogspot.com/search/label/lift
>
> > --
> > Lift, the simply functional web frameworkhttp://liftweb.net
> > Beginning Scalahttp://www.apress.com/book/view/1430219890
> > Follow me:http://twitter.com/dpp
> > Git some:http://github.com/dpp

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Lift WebServices

2009-09-08 Thread abruzzo

I'm trying to set up a simple web service using Lift v1.0. I've
scoured
across many examples but because of changes in the api's, none of them
compile. I finally found an example of a dispatcher tha compiles but
in the
sample as in others the dispatcher is added in the boot method of the
Boot
class as follows:

LiftRules.dispatch.prepend(RestApi.dispatch)


This compiles fine however, upon startup I get the following stack:

ERROR - Failed to Boot
java.lang.IllegalStateException: Cannot modify after boot.
at net.liftweb.http.RulesSeq$class.safe_$qmark(LiftRules.scala:885)
at net.liftweb.http.RulesSeq$class.prepend(LiftRules.scala:892)
at net.liftweb.http.RulesSeq$$anon$3.prepend(LiftRules.scala:872)
at net.liftweb.http.LiftFilter.preBoot(LiftServlet.scala:581)
at net.liftweb.http.LiftFilter.bootLift(LiftServlet.scala:572)
at net.liftweb.http.LiftFilter.init(LiftServlet.scala:548)
at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:
97)
at org.mortbay.component.AbstractLifeCycle.start
(AbstractLifeCycle.java:50)
at
org.mortbay.jetty.servlet.ServletHandler.initialize
(ServletHandler.java:653)
at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)
at
org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:
1239)
at
org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:
517)
at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:
466)
at
org.mortbay.jetty.plugin.Jetty6PluginWebAppContext.doStart
(Jetty6PluginWebAppContext.java:124)
at org.mortbay.component.AbstractLifeCycle.start
(AbstractLifeCycle.java:50)
at
org.mortbay.jetty.handler.HandlerCollection.doStart
(HandlerCollection.java:152)
at
org.mortbay.jetty.handler.ContextHandlerCollection.doStart
(ContextHandlerCollection.java:156)
at org.mortbay.component.AbstractLifeCycle.start
(AbstractLifeCycle.java:50)
at
org.mortbay.jetty.handler.HandlerCollection.doStart
(HandlerCollection.java:152)
at org.mortbay.component.AbstractLifeCycle.start
(AbstractLifeCycle.java:50)
at
org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:
130)
at org.mortbay.jetty.Server.doStart(Server.java:224)
at org.mortbay.component.AbstractLifeCycle.start
(AbstractLifeCycle.java:50)
at
org.mortbay.jetty.plugin.Jetty6PluginServer.start
(Jetty6PluginServer.java:132)
at
org.mortbay.jetty.plugin.AbstractJettyMojo.startJetty
(AbstractJettyMojo.java:441)
at
org.mortbay.jetty.plugin.AbstractJettyMojo.execute
(AbstractJettyMojo.java:383)
at
org.mortbay.jetty.plugin.AbstractJettyRunMojo.execute
(AbstractJettyRunMojo.java:210)
at org.mortbay.jetty.plugin.Jetty6RunMojo.execute(Jetty6RunMojo.java:
184)
at
org.apache.maven.plugin.DefaultPluginManager.executeMojo
(DefaultPluginManager.java:451)
at
org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals
(DefaultLifecycleExecutor.java:558)
at
org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandaloneGoal
(DefaultLifecycleExecutor.java:512)
at
org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal
(DefaultLifecycleExecutor.java:482)
at
org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures
(DefaultLifecycleExecutor.java:330)
at
org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments
(DefaultLifecycleExecutor.java:291)
at
org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute
(DefaultLifecycleExecutor.java:142)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:336)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:129)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:287)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke
(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke
(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:
315)
at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:
430)
at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
2009-09-07 11:57:17.823::INFO:  Started
selectchannelconnec...@0.0.0.0:8080

Any help would be greatly appreciated. Also, if anyone knows of where
I can
find a sample Lift / BlazeDS application that will actually compile
using
Lift 1.0, please let me know.

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this gr

[Lift] Re: rewrite problem

2009-09-08 Thread night_stalker

Can't find

   RewriteResponse.apply(List[String], Map[String, String], Boolean)

in 1.0 API, is it a new feature?

On Sep 8, 11:52 pm, David Pollak 
wrote:
> or:
> LiftRules.rewrite.append {
>      case RewriteRequest(ParsePath(List("post", id), _, _, _), _, _)
> =>
>        RewriteResponse(List("post","show"), Map("id"->urlDecode(id)), *true*
> )
>    }
>
> The true parameter stops the rewriting process so you don't get the infinite
> loop.

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: setting user-agent header with Databinder

2009-09-08 Thread David Pollak
Jack,
I'm not sure where N8han (the author of Databinder) hangs out, but it's not
on the Lift list.  :-(

Sorry.

David

On Tue, Sep 8, 2009 at 8:58 AM, jack  wrote:

>
> Please forgive me for including so much code but I have an important
> demo fast approaching and I'm kind of in a bind. I am using
> Databinders Dispatch http library which is a wrapper around Javas
> HttpClient library. I have included the Http class below. Does anyone
> see how to set the user-agent header. Once again I apologize and would
> be much obliged for any help.
>
> import collection.Map
> import collection.immutable.{Map => IMap}
> import util.DynamicVariable
> import java.io.
> {InputStream,OutputStream,BufferedInputStream,BufferedOutputStream}
> import java.net.URI
> import java.util.zip.GZIPInputStream
>
> import org.apache.http._
> import org.apache.http.client._
> import org.apache.http.impl.client.{DefaultHttpClient,
> BasicCredentialsProvider}
> import org.apache.http.client.methods._
> import org.apache.http.client.entity.UrlEncodedFormEntity
> import org.apache.http.client.utils.URLEncodedUtils
>
> import org.apache.http.entity.StringEntity
> import org.apache.http.message.BasicNameValuePair
> import org.apache.http.protocol.HTTP.UTF_8
> import org.apache.http.params.{HttpProtocolParams, BasicHttpParams}
> import org.apache.http.util.EntityUtils
> import org.apache.http.auth.{AuthScope, UsernamePasswordCredentials,
> Credentials}
>
> case class StatusCode(code: Int, contents:String)
>  extends Exception("Exceptional resoponse code: " + code + "\n" +
> contents)
>
> /** Http access point. Standard instances to be used by a single
> thread. */
> class Http {
>  val credentials = new DynamicVariable[Option[(AuthScope,
> Credentials)]](None)
>  val client = new ConfiguredHttpClient
>
>  def credentialsProvider = new BasicCredentialsProvider {
>override def getCredentials(scope: AuthScope) = null
>  }
>
> /**  /** Info Logger for this instance, default returns Connfiggy if
> on classpath else console logger. */
>  lazy val log: Logger = try {
>new Logger {
>  val delegate = net.lag.logging.Logger.get
>  def info(msg: String, items: Any*) { delegate.info(msg, items:
> _*) }
>}
>  } catch {
>case e: NoClassDefFoundError => new Logger {
>  def info(msg: String, items: Any*) {
>println("INF: [console logger] dispatch: " + msg.format(items:
> _*))
>  }
>}
>  }
>  **/
>  /** Execute method for the given host, with logging. */
>  def execute(host: HttpHost, req: HttpUriRequest) = {
>//log.info("%s %s%s", req.getMethod, host, req.getURI)
>client.execute(host, req)
>  }
>  /** Execute for given optional parametrs, with logging. Creates
> local scope for credentials. */
>  val execute: (Option[HttpHost], Option[Credentials], HttpUriRequest)
> => HttpResponse = {
>case (Some(host), Some(creds), req) =>
>  client.credentials.withValue(Some((new AuthScope
> (host.getHostName, host.getPort), creds)))(execute(host, req))
>case (None, Some(creds), _) => error("Credentials specified
> without explicit host")
>case (Some(host), _, req) => execute(host, req)
>case (_, _, req) =>
>  //log.info("%s %s", req.getMethod, req.getURI)
>  client.execute(req)
>  }
>  /** Execute full request-response handler. */
>  def x[T](hand: Handler[T]): T = x(hand.request)(hand.block)
>  /** Execute request and handle response codes, response, and entity
> in block */
>  def x [T](req: Request)(block: Handler.F[T]) = {
>val res = execute(req.host, req.creds, req.req)
>val ent = res.getEntity match {
>  case null => None
>  case ent => Some(ent)
>}
>try { block(res.getStatusLine.getStatusCode, res, ent) }
>finally { ent foreach (_.consumeContent) }
>  }
>  /** Apply Response Handler if reponse code returns true from chk. */
>  def when[T](chk: Int => Boolean)(hand: Handler[T]) = x(hand.request)
> {
>case (code, res, ent) if chk(code) => hand.block(code, res, ent)
>case (code, _, Some(ent)) => throw StatusCode(code,
> EntityUtils.toString(ent, UTF_8))
>case (code, _, _) => throw StatusCode(code, "[no entity]")
>  }
>  /** Apply a custom block in addition to predefined response Handler.
> */
>  def also[A,B](hand: Handler[B])(block: Handler.F[A]) =
>x(hand.request) { (code, res, ent) => ( hand.block(code, res,
> ent), block(code, res, ent) ) }
>
>  /** Apply handler block when response code is 200 - 204 */
>  def apply[T](hand: Handler[T]) = (this when {code => (200 to 204)
> contains code})(hand)
> }
>
> /** Nil request, useful to kick off a descriptors that don't have a
> factory. */
> object /\ extends Request(None, None, Nil)
>
> /* Factory for requests from a host */
> object :/ {
>  def apply(hostname: String, port: Int): Request =
>new Request(Some(new HttpHost(hostname, port)), None, Nil)
>
>  def apply(hostname: String): Request = new Request(Some(new HttpHost
> (hostname)), None, Nil)
> }
>
> /** Factory for requests fro

[Lift] never mind. I contacted the author of Databinder. But thanks

2009-09-08 Thread jack

setting user-agent header. My question is answered
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: Compiler crash

2009-09-08 Thread David Pollak
Over the years, I have seen lots of Scala compiler problems with complex
types.  The problems are less frequent, but they do come up.

If you have a compiler problem:

   1. Stop fsc and try again
   2. Check the EPFL tickets
   3. Post a reproducible example (either on this list or on the Scala
   internals list).  Anything that's not reproducible is not going to get me to
   spend any time on it because the problems are non-trivially complex and I'm
   not going to spend my time trying to figure out what you are trying to do
   when it will take a lot less of your time create a simple project the
   demonstrates the problem.

Also, what do you want to happen as a result of this posting?  If you want
someone to fix the Scala compiler, I think you're out of luck.  Martin has
made it pretty clear that he's not going to be allocating EPFL resources to
bug-fixing 2.7.x and Martin, Adriaan, and PaulP are the only people who can
fix this kind of problem.   If you're looking for a work-around, please post
a reproducible example and I'll see what I can put together.

On Sat, Sep 5, 2009 at 9:57 PM, Naftoli Gugenheim wrote:

>
> Stack overflow
>
> trait X[T<:LongKeyedMapper[T]] {this: T => }
>
> def f[T<: Mapper[T]](table: T with X[T]) = table match {
>  case t: X[T] =>
>var l: List[T] = Nil
>l ::= t.create
> }
>
>
> >
>


-- 
Lift, the simply functional web framework http://liftweb.net
Beginning Scala http://www.apress.com/book/view/1430219890
Follow me: http://twitter.com/dpp
Git some: http://github.com/dpp

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: Hudson build down?

2009-09-08 Thread David Pollak
On Mon, Sep 7, 2009 at 11:22 AM, Timothy Perrett wrote:

>
> OK, so its been running for a while now and it looks like its
> featuring that same file open problem as before
>
> Can one of the admins fix it?
>

restarted.

Also, if there are scala-tools.org related issues, please send them to
ad...@scala-tools.org.


>
> Cheers, Tim
>
> On Sep 7, 6:54 pm, Timothy Perrett  wrote:
> > I've just triggered a manual build - so lets see if it works.
> >
> > Cheers, Tim
> >
> > On Sep 7, 9:19 am, Jeppe Nejsum Madsen  wrote:
> >
> >
> >
> > > Hi,
> >
> > > Seems like it's been 5 days without a build, but there has been plenty
> > > of action on github.
> >
> > > But looking at the maven repo it looks like there has been a snapshot
> > > release on sep 7 Is this a manual build or is this no longer the
> > > build server for lift:http://hudson.scala-tools.org/job/Lift/
> >
> > > /Jeppe
> >
>


-- 
Lift, the simply functional web framework http://liftweb.net
Beginning Scala http://www.apress.com/book/view/1430219890
Follow me: http://twitter.com/dpp
Git some: http://github.com/dpp

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: Using Roles and LIftRules.authentication

2009-09-08 Thread marius d.



On Sep 8, 7:00 pm, glenn  wrote:
> Marius,
>
> I guess there is little more to be said on this issue. Keep in mind
> that
> in many real-world applications, dynamically assigned user roles are a
> requirement. And it's possible for users to have multiple roles, each
> in a different role hierarchy, in the same application.

Well Lift Roles are build on hierarchical model.

>
> Inevitably, I will have to implement my own, perhaps using
> JaaS or one of its variants. If you have any thoughts on that issue,
> I'd like to hear them.

I kind of doubt that JAAS will take you farther then Lift HTTP auth
support.

>
> Thanks,
>
> Glenn
>
> On Sep 8, 8:40 am, "marius d."  wrote:
>
> > On Sep 8, 6:12 pm, glenn  wrote:
>
> > > Marius,
>
> > > With your help, I think I'm getting closer to understanding what is
> > > needed
> > > here.
>
> > > One thing though, is that I believe I do need to manually check if the
> > > user has the
> > > appropriate role (in the DB) before I can set userRoles RequestVar.
> > > See, in my application,
> > > I have no way of knowing in advance if a logged-in user is authorized
> > > to access
> > > a particular resource. I'm trying to accomplish that programatically.
>
> > Well if when authenticating a user (LiftRules.authentication) you
> > can't determine the Role, then this mechanism probably won't help you
> > and you need to build your own.
>
> > > And, don't forget, roles
> > > can be changed at any time in the application.
>
> > I assume that a "super-admin" user would be able to change roles for
> > other users right? ... If so you just need to update data in your DB
> > for say user X. So when User X authenticates you'll get the new role
> > assigned. But maybe this is not how your app is designed to work.
>
> > > In other words, I
> > > can't just assume it in my
> > > authentication function and make the assignment there.
>
> > > Does that make sense?  This is not to say that I can't work
> > > tangentially to Http basic authentication
> > > in Lift and create my own, just that I'm trying to incorporate the
> > > work already done so I don't have to.
>
> > Lift's HTTP authentication and authorization is built on very simple
> > principles such as:
>
> > 1. In the authentication function you typically know the role for that
> > user.
> > 2. Resources (URI's essentially) are protected by hierarchically
> > structured roles that are matched with the role determined by the
> > authentication function.
>
> > > Glenn
>
> > > On Sep 7, 11:24 pm, "marius d."  wrote:
>
> > > > On Sep 8, 1:18 am, glenn  wrote:
>
> > > > > Marius,
>
> > > > > Please bear with me. I'm a little slow in following the logic here.
>
> > > > Don't worry glen.
>
> > > > > I understand I can protect the resource as you suggest from all
> > > > > but users with admin roles, using the LocParam,
>
> > > > > HttpAuthProtected(() => Full(AuthRole("admin") .
>
> > > > > Now, when I click on the link, if no user is logged in, the system
> > > > > asks for a username and password to connect, but that's a user
> > > > > on the host. not an application user.
>
> > > > Not necessarily. It is any type of user. In your authentication
> > > > function you can go in DB and validate the receiving credentials as
> > > > application user.
>
> > > > > Somewhere, I need to assign the
> > > > > currently logged in user the AuthRole("admin") needed to access
> > > > > the resource.
>
> > > > Correct. And you dothis by setting userRoles RequestVar.
>
> > > > > Seems to me I need code like this to run someplace:
>
> > > > > def authorize(roleName:String): Box[Role] = {
> > > > >       object userRoles extends RequestVar[Role](null)
>
> > > > >       val credentials : (String,String) = User.currentUser match {
> > > > >           case Full(u) => (u.email.is, u.password.is)
> > > > >          case Empty => (null, null)
> > > > >       }
>
> > > > >       User.isa_?(roleName) match {
> > > > >         case true => {
> > > > >             LiftRules.authentication = HttpBasicAuthentication("lift")
> > > > > {
> > > > >                 case (credentials._1, credentials._2, req) =>
> > > > >                         println("John is authenticated!")
> > > > >                         
> > > > > userRoles(_root_.net.liftweb.http.auth.AuthRole
> > > > > (roleName))
> > > > >                         true
> > > > >             }
> > > > >             Full(new _root_.net.liftweb.http.auth.Role{
> > > > >                         def name = roleName})
> > > > >             }
> > > > >       case false => Empty
> > > > >     }
> > > > >  }
>
> > > > > Can't be in Boot,
>
> > > > No you do not. Lift takes care of the roles matching for you. You
> > > > don't need to manually test if a user is-an admin or some other role
> > > > in order to access that resource. Please keep in mind that is just for
> > > > accessing resources (URI-s) if you need to do more complex logic in
> > > > your code and see if the user is an admin or having some other Role

[Lift] Re: Using Roles and LIftRules.authentication

2009-09-08 Thread glenn

Marius,

I guess there is little more to be said on this issue. Keep in mind
that
in many real-world applications, dynamically assigned user roles are a
requirement. And it's possible for users to have multiple roles, each
in a different role hierarchy, in the same application.

Inevitably, I will have to implement my own, perhaps using
JaaS or one of its variants. If you have any thoughts on that issue,
I'd like to hear them.

Thanks,

Glenn

On Sep 8, 8:40 am, "marius d."  wrote:
> On Sep 8, 6:12 pm, glenn  wrote:
>
> > Marius,
>
> > With your help, I think I'm getting closer to understanding what is
> > needed
> > here.
>
> > One thing though, is that I believe I do need to manually check if the
> > user has the
> > appropriate role (in the DB) before I can set userRoles RequestVar.
> > See, in my application,
> > I have no way of knowing in advance if a logged-in user is authorized
> > to access
> > a particular resource. I'm trying to accomplish that programatically.
>
> Well if when authenticating a user (LiftRules.authentication) you
> can't determine the Role, then this mechanism probably won't help you
> and you need to build your own.
>
> > And, don't forget, roles
> > can be changed at any time in the application.
>
> I assume that a "super-admin" user would be able to change roles for
> other users right? ... If so you just need to update data in your DB
> for say user X. So when User X authenticates you'll get the new role
> assigned. But maybe this is not how your app is designed to work.
>
> > In other words, I
> > can't just assume it in my
> > authentication function and make the assignment there.
>
> > Does that make sense?  This is not to say that I can't work
> > tangentially to Http basic authentication
> > in Lift and create my own, just that I'm trying to incorporate the
> > work already done so I don't have to.
>
> Lift's HTTP authentication and authorization is built on very simple
> principles such as:
>
> 1. In the authentication function you typically know the role for that
> user.
> 2. Resources (URI's essentially) are protected by hierarchically
> structured roles that are matched with the role determined by the
> authentication function.
>
>
>
> > Glenn
>
> > On Sep 7, 11:24 pm, "marius d."  wrote:
>
> > > On Sep 8, 1:18 am, glenn  wrote:
>
> > > > Marius,
>
> > > > Please bear with me. I'm a little slow in following the logic here.
>
> > > Don't worry glen.
>
> > > > I understand I can protect the resource as you suggest from all
> > > > but users with admin roles, using the LocParam,
>
> > > > HttpAuthProtected(() => Full(AuthRole("admin") .
>
> > > > Now, when I click on the link, if no user is logged in, the system
> > > > asks for a username and password to connect, but that's a user
> > > > on the host. not an application user.
>
> > > Not necessarily. It is any type of user. In your authentication
> > > function you can go in DB and validate the receiving credentials as
> > > application user.
>
> > > > Somewhere, I need to assign the
> > > > currently logged in user the AuthRole("admin") needed to access
> > > > the resource.
>
> > > Correct. And you dothis by setting userRoles RequestVar.
>
> > > > Seems to me I need code like this to run someplace:
>
> > > > def authorize(roleName:String): Box[Role] = {
> > > >       object userRoles extends RequestVar[Role](null)
>
> > > >       val credentials : (String,String) = User.currentUser match {
> > > >           case Full(u) => (u.email.is, u.password.is)
> > > >          case Empty => (null, null)
> > > >       }
>
> > > >       User.isa_?(roleName) match {
> > > >         case true => {
> > > >             LiftRules.authentication = HttpBasicAuthentication("lift")
> > > > {
> > > >                 case (credentials._1, credentials._2, req) =>
> > > >                         println("John is authenticated!")
> > > >                         userRoles(_root_.net.liftweb.http.auth.AuthRole
> > > > (roleName))
> > > >                         true
> > > >             }
> > > >             Full(new _root_.net.liftweb.http.auth.Role{
> > > >                         def name = roleName})
> > > >             }
> > > >       case false => Empty
> > > >     }
> > > >  }
>
> > > > Can't be in Boot,
>
> > > No you do not. Lift takes care of the roles matching for you. You
> > > don't need to manually test if a user is-an admin or some other role
> > > in order to access that resource. Please keep in mind that is just for
> > > accessing resources (URI-s) if you need to do more complex logic in
> > > your code and see if the user is an admin or having some other Role
> > > that you'd probably need to save the Role into a SessionVar or into
> > > your User object.
>
> > > All I want here is to explain how HTTP based authentication and roles
> > > based authorization works. I am definitely not claiming that this is
> > > enough for all applications as currently we don't have HTTP based
> > > authentication with forms for example .

[Lift] setting user-agent header with Databinder

2009-09-08 Thread jack

Please forgive me for including so much code but I have an important
demo fast approaching and I'm kind of in a bind. I am using
Databinders Dispatch http library which is a wrapper around Javas
HttpClient library. I have included the Http class below. Does anyone
see how to set the user-agent header. Once again I apologize and would
be much obliged for any help.

import collection.Map
import collection.immutable.{Map => IMap}
import util.DynamicVariable
import java.io.
{InputStream,OutputStream,BufferedInputStream,BufferedOutputStream}
import java.net.URI
import java.util.zip.GZIPInputStream

import org.apache.http._
import org.apache.http.client._
import org.apache.http.impl.client.{DefaultHttpClient,
BasicCredentialsProvider}
import org.apache.http.client.methods._
import org.apache.http.client.entity.UrlEncodedFormEntity
import org.apache.http.client.utils.URLEncodedUtils

import org.apache.http.entity.StringEntity
import org.apache.http.message.BasicNameValuePair
import org.apache.http.protocol.HTTP.UTF_8
import org.apache.http.params.{HttpProtocolParams, BasicHttpParams}
import org.apache.http.util.EntityUtils
import org.apache.http.auth.{AuthScope, UsernamePasswordCredentials,
Credentials}

case class StatusCode(code: Int, contents:String)
  extends Exception("Exceptional resoponse code: " + code + "\n" +
contents)

/** Http access point. Standard instances to be used by a single
thread. */
class Http {
  val credentials = new DynamicVariable[Option[(AuthScope,
Credentials)]](None)
  val client = new ConfiguredHttpClient

  def credentialsProvider = new BasicCredentialsProvider {
override def getCredentials(scope: AuthScope) = null
  }

/**  /** Info Logger for this instance, default returns Connfiggy if
on classpath else console logger. */
  lazy val log: Logger = try {
new Logger {
  val delegate = net.lag.logging.Logger.get
  def info(msg: String, items: Any*) { delegate.info(msg, items:
_*) }
}
  } catch {
case e: NoClassDefFoundError => new Logger {
  def info(msg: String, items: Any*) {
println("INF: [console logger] dispatch: " + msg.format(items:
_*))
  }
}
  }
  **/
  /** Execute method for the given host, with logging. */
  def execute(host: HttpHost, req: HttpUriRequest) = {
//log.info("%s %s%s", req.getMethod, host, req.getURI)
client.execute(host, req)
  }
  /** Execute for given optional parametrs, with logging. Creates
local scope for credentials. */
  val execute: (Option[HttpHost], Option[Credentials], HttpUriRequest)
=> HttpResponse = {
case (Some(host), Some(creds), req) =>
  client.credentials.withValue(Some((new AuthScope
(host.getHostName, host.getPort), creds)))(execute(host, req))
case (None, Some(creds), _) => error("Credentials specified
without explicit host")
case (Some(host), _, req) => execute(host, req)
case (_, _, req) =>
  //log.info("%s %s", req.getMethod, req.getURI)
  client.execute(req)
  }
  /** Execute full request-response handler. */
  def x[T](hand: Handler[T]): T = x(hand.request)(hand.block)
  /** Execute request and handle response codes, response, and entity
in block */
  def x [T](req: Request)(block: Handler.F[T]) = {
val res = execute(req.host, req.creds, req.req)
val ent = res.getEntity match {
  case null => None
  case ent => Some(ent)
}
try { block(res.getStatusLine.getStatusCode, res, ent) }
finally { ent foreach (_.consumeContent) }
  }
  /** Apply Response Handler if reponse code returns true from chk. */
  def when[T](chk: Int => Boolean)(hand: Handler[T]) = x(hand.request)
{
case (code, res, ent) if chk(code) => hand.block(code, res, ent)
case (code, _, Some(ent)) => throw StatusCode(code,
EntityUtils.toString(ent, UTF_8))
case (code, _, _) => throw StatusCode(code, "[no entity]")
  }
  /** Apply a custom block in addition to predefined response Handler.
*/
  def also[A,B](hand: Handler[B])(block: Handler.F[A]) =
x(hand.request) { (code, res, ent) => ( hand.block(code, res,
ent), block(code, res, ent) ) }

  /** Apply handler block when response code is 200 - 204 */
  def apply[T](hand: Handler[T]) = (this when {code => (200 to 204)
contains code})(hand)
}

/** Nil request, useful to kick off a descriptors that don't have a
factory. */
object /\ extends Request(None, None, Nil)

/* Factory for requests from a host */
object :/ {
  def apply(hostname: String, port: Int): Request =
new Request(Some(new HttpHost(hostname, port)), None, Nil)

  def apply(hostname: String): Request = new Request(Some(new HttpHost
(hostname)), None, Nil)
}

/** Factory for requests from a directory, prepends '/'. */
object / {
  def apply(path: String) = /\ / path
}

object Request {
  /** Request transformer */
  type Xf = HttpRequestBase => HttpRequestBase
  /** Updates the request URI with the given string-to-string
function. (mutates request) */
  def uri_xf(sxf: String => String)(req: HttpRequestBase) = {
req.setURI(URI.c

[Lift] Re: rewrite problem

2009-09-08 Thread David Pollak
On Tue, Sep 8, 2009 at 6:40 AM, night_stalker  wrote:

>
> Cool, thank you very much!
>
> On Sep 8, 8:56 pm, Xavi Ramirez  wrote:
> > That's because the url "post/show" is being intercepted by the same
> > rewrite rule that matches "post/" urls.  To get around this, try
> > adding an if statement to your rewrite rule:
> >
> > LiftRules.rewrite.append {
> >   case RewriteRequest(ParsePath(List("post", id), _, _, _), _, _)
> >  if (id != "show") =>
> > RewriteResponse(List("post","show"), Map("id"->urlDecode(id)))
>

or:
LiftRules.rewrite.append {
 case RewriteRequest(ParsePath(List("post", id), _, _, _), _, _)
=>
   RewriteResponse(List("post","show"), Map("id"->urlDecode(id)), *true*
)
   }

The true parameter stops the rewriting process so you don't get the infinite
loop.



> >
> > Hope this helps!
> >
> > ~Xavi
> >
> > On Tue, Sep 8, 2009 at 12:12 AM, night_stalker wrote:
> >
> > > I want to make RESTful urls (not REST API), for example:
> >
> > >  "/post/123" is mapped to "post/show.html" with param "id=123"
> >
> > > but the following rewrite rule seems recursive
> >
> > >LiftRules.rewrite.append {
> > >  case RewriteRequest(ParsePath(List("post", id), _, _, _), _, _)
> > > =>
> > >RewriteResponse(List("post","show"), Map("id"->urlDecode(id)))
> > >}
> >
> > > and loops forever ...
>
> >
>


-- 
Lift, the simply functional web framework http://liftweb.net
Beginning Scala http://www.apress.com/book/view/1430219890
Follow me: http://twitter.com/dpp
Git some: http://github.com/dpp

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: Using Roles and LIftRules.authentication

2009-09-08 Thread marius d.



On Sep 8, 6:12 pm, glenn  wrote:
> Marius,
>
> With your help, I think I'm getting closer to understanding what is
> needed
> here.
>
> One thing though, is that I believe I do need to manually check if the
> user has the
> appropriate role (in the DB) before I can set userRoles RequestVar.
> See, in my application,
> I have no way of knowing in advance if a logged-in user is authorized
> to access
> a particular resource. I'm trying to accomplish that programatically.

Well if when authenticating a user (LiftRules.authentication) you
can't determine the Role, then this mechanism probably won't help you
and you need to build your own.

> And, don't forget, roles
> can be changed at any time in the application.

I assume that a "super-admin" user would be able to change roles for
other users right? ... If so you just need to update data in your DB
for say user X. So when User X authenticates you'll get the new role
assigned. But maybe this is not how your app is designed to work.

> In other words, I
> can't just assume it in my
> authentication function and make the assignment there.
>
> Does that make sense?  This is not to say that I can't work
> tangentially to Http basic authentication
> in Lift and create my own, just that I'm trying to incorporate the
> work already done so I don't have to.

Lift's HTTP authentication and authorization is built on very simple
principles such as:

1. In the authentication function you typically know the role for that
user.
2. Resources (URI's essentially) are protected by hierarchically
structured roles that are matched with the role determined by the
authentication function.


>
> Glenn
>
> On Sep 7, 11:24 pm, "marius d."  wrote:
>
> > On Sep 8, 1:18 am, glenn  wrote:
>
> > > Marius,
>
> > > Please bear with me. I'm a little slow in following the logic here.
>
> > Don't worry glen.
>
> > > I understand I can protect the resource as you suggest from all
> > > but users with admin roles, using the LocParam,
>
> > > HttpAuthProtected(() => Full(AuthRole("admin") .
>
> > > Now, when I click on the link, if no user is logged in, the system
> > > asks for a username and password to connect, but that's a user
> > > on the host. not an application user.
>
> > Not necessarily. It is any type of user. In your authentication
> > function you can go in DB and validate the receiving credentials as
> > application user.
>
> > > Somewhere, I need to assign the
> > > currently logged in user the AuthRole("admin") needed to access
> > > the resource.
>
> > Correct. And you dothis by setting userRoles RequestVar.
>
> > > Seems to me I need code like this to run someplace:
>
> > > def authorize(roleName:String): Box[Role] = {
> > >       object userRoles extends RequestVar[Role](null)
>
> > >       val credentials : (String,String) = User.currentUser match {
> > >           case Full(u) => (u.email.is, u.password.is)
> > >          case Empty => (null, null)
> > >       }
>
> > >       User.isa_?(roleName) match {
> > >         case true => {
> > >             LiftRules.authentication = HttpBasicAuthentication("lift")
> > > {
> > >                 case (credentials._1, credentials._2, req) =>
> > >                         println("John is authenticated!")
> > >                         userRoles(_root_.net.liftweb.http.auth.AuthRole
> > > (roleName))
> > >                         true
> > >             }
> > >             Full(new _root_.net.liftweb.http.auth.Role{
> > >                         def name = roleName})
> > >             }
> > >       case false => Empty
> > >     }
> > >  }
>
> > > Can't be in Boot,
>
> > No you do not. Lift takes care of the roles matching for you. You
> > don't need to manually test if a user is-an admin or some other role
> > in order to access that resource. Please keep in mind that is just for
> > accessing resources (URI-s) if you need to do more complex logic in
> > your code and see if the user is an admin or having some other Role
> > that you'd probably need to save the Role into a SessionVar or into
> > your User object.
>
> > All I want here is to explain how HTTP based authentication and roles
> > based authorization works. I am definitely not claiming that this is
> > enough for all applications as currently we don't have HTTP based
> > authentication with forms for example ... but I think we should add
> > that as well.
>
> > > Glenn
>
> > > On Sep 7, 1:36 pm, "marius d."  wrote:
>
> > > > On Sep 7, 10:53 pm, glenn  wrote:
>
> > > > > Marius,
>
> > > > > In practical terms, if I am already using an If LocParam, as in the
> > > > > following:
>
> > > > > If(() => User.isa_?("admin"), S.?("not_authorized"))
>
> > > > > what does adding
>
> > > > > HttpAuthProtected(() => User.authorize("admin")) to the Loc do?
>
> > > > It sais that this Loc is protected by the returned Role. Thus to
> > > > access this after passing the authentication the Role specified in the
> > > > authentication function (by setting userRoles) must be the same as o

[Lift] Re: Using Roles and LIftRules.authentication

2009-09-08 Thread glenn

Marius,

With your help, I think I'm getting closer to understanding what is
needed
here.

One thing though, is that I believe I do need to manually check if the
user has the
appropriate role (in the DB) before I can set userRoles RequestVar.
See, in my application,
I have no way of knowing in advance if a logged-in user is authorized
to access
a particular resource. I'm trying to accomplish that programatically.
And, don't forget, roles
can be changed at any time in the application.  In other words, I
can't just assume it in my
authentication function and make the assignment there.

Does that make sense?  This is not to say that I can't work
tangentially to Http basic authentication
in Lift and create my own, just that I'm trying to incorporate the
work already done so I don't have to.

Glenn

On Sep 7, 11:24 pm, "marius d."  wrote:
> On Sep 8, 1:18 am, glenn  wrote:
>
> > Marius,
>
> > Please bear with me. I'm a little slow in following the logic here.
>
> Don't worry glen.
>
>
>
> > I understand I can protect the resource as you suggest from all
> > but users with admin roles, using the LocParam,
>
> > HttpAuthProtected(() => Full(AuthRole("admin") .
>
> > Now, when I click on the link, if no user is logged in, the system
> > asks for a username and password to connect, but that's a user
> > on the host. not an application user.
>
> Not necessarily. It is any type of user. In your authentication
> function you can go in DB and validate the receiving credentials as
> application user.
>
> > Somewhere, I need to assign the
> > currently logged in user the AuthRole("admin") needed to access
> > the resource.
>
> Correct. And you dothis by setting userRoles RequestVar.
>
>
>
>
>
> > Seems to me I need code like this to run someplace:
>
> > def authorize(roleName:String): Box[Role] = {
> >       object userRoles extends RequestVar[Role](null)
>
> >       val credentials : (String,String) = User.currentUser match {
> >           case Full(u) => (u.email.is, u.password.is)
> >          case Empty => (null, null)
> >       }
>
> >       User.isa_?(roleName) match {
> >         case true => {
> >             LiftRules.authentication = HttpBasicAuthentication("lift")
> > {
> >                 case (credentials._1, credentials._2, req) =>
> >                         println("John is authenticated!")
> >                         userRoles(_root_.net.liftweb.http.auth.AuthRole
> > (roleName))
> >                         true
> >             }
> >             Full(new _root_.net.liftweb.http.auth.Role{
> >                         def name = roleName})
> >             }
> >       case false => Empty
> >     }
> >  }
>
> > Can't be in Boot,
>
> No you do not. Lift takes care of the roles matching for you. You
> don't need to manually test if a user is-an admin or some other role
> in order to access that resource. Please keep in mind that is just for
> accessing resources (URI-s) if you need to do more complex logic in
> your code and see if the user is an admin or having some other Role
> that you'd probably need to save the Role into a SessionVar or into
> your User object.
>
> All I want here is to explain how HTTP based authentication and roles
> based authorization works. I am definitely not claiming that this is
> enough for all applications as currently we don't have HTTP based
> authentication with forms for example ... but I think we should add
> that as well.
>
>
>
> > Glenn
>
> > On Sep 7, 1:36 pm, "marius d."  wrote:
>
> > > On Sep 7, 10:53 pm, glenn  wrote:
>
> > > > Marius,
>
> > > > In practical terms, if I am already using an If LocParam, as in the
> > > > following:
>
> > > > If(() => User.isa_?("admin"), S.?("not_authorized"))
>
> > > > what does adding
>
> > > > HttpAuthProtected(() => User.authorize("admin")) to the Loc do?
>
> > > It sais that this Loc is protected by the returned Role. Thus to
> > > access this after passing the authentication the Role specified in the
> > > authentication function (by setting userRoles) must be the same as or
> > > a child of the Role the is protecting the Loc.
>
> > > > Here, I've had to define User.authorize to make things work, as:
>
> > > >  def authorize(roleName:String): Box[Role] =  {
> > > >       val credentials : (String,String) = User.currentUser match {
> > > >           case Full(u) => (u.email.is, u.password.is)
> > > >           case Empty => (null, null)
> > > >       }
>
> > > >       User.isa_?(roleName) match {
> > > >         case true => {
> > > >             LiftRules.httpAuthProtectedResource.append {
> > > >                 case (ParsePath("listContents" :: _, _, _, _)) => Full
> > > > (AuthRole("admin"))
> > > >             }
>
> > > Why do you need to use httpAuthProtectedResource if you' using
> > > HttpAuthProtected LocParam ?
>
> > > >             LiftRules.authentication = HttpBasicAuthentication("lift")
> > > > {
> > > >                 case (credentials._1, credentials._2, req) =>
> > > >                         AuthRole(roleNa

[Lift] setting user-agent header

2009-09-08 Thread jack

Has anyone used dispatch from databinder.net?  Its an http library in
Scala.
I do not know how to set the User-Agent header.
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: rewrite problem

2009-09-08 Thread night_stalker

Cool, thank you very much!

On Sep 8, 8:56 pm, Xavi Ramirez  wrote:
> That's because the url "post/show" is being intercepted by the same
> rewrite rule that matches "post/" urls.  To get around this, try
> adding an if statement to your rewrite rule:
>
> LiftRules.rewrite.append {
>   case RewriteRequest(ParsePath(List("post", id), _, _, _), _, _)
>      if (id != "show") =>
>         RewriteResponse(List("post","show"), Map("id"->urlDecode(id)))
>
> Hope this helps!
>
> ~Xavi
>
> On Tue, Sep 8, 2009 at 12:12 AM, night_stalker wrote:
>
> > I want to make RESTful urls (not REST API), for example:
>
> >  "/post/123" is mapped to "post/show.html" with param "id=123"
>
> > but the following rewrite rule seems recursive
>
> >    LiftRules.rewrite.append {
> >      case RewriteRequest(ParsePath(List("post", id), _, _, _), _, _)
> > =>
> >        RewriteResponse(List("post","show"), Map("id"->urlDecode(id)))
> >    }
>
> > and loops forever ...

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: & vs & within attributes in templates

2009-09-08 Thread David Pollak
On Mon, Sep 7, 2009 at 9:17 PM, Grant Wood  wrote:

>
> Hello Lifters,
>
> If I create a template with the following:
>
> 
>  Foo
>  
> 
>
> I will be served an empty page, containing none of my snippets, and
> throwing or logging no errors.  By "empty" I mean, the page contains
> only the outermost xhtml which Lift wraps a page with (liftajax, xml
> declaration, etc.) but nothing from any of my own templates or
> snippets.
>
> Very odd.
>
> On a hunch, I escaped the & to & and suddenly the page appeared
> fully rendered. i.e.:
> Foo
>
> My first concern is that I should not have had to escape the & at all
> in an attribute.  This is a valid character in any XML attribute.
>

& is not a valid character in an XML attribute.  The & character must be
escaped as &


>
> Second, if there is some reasonable lift-specific reason that I need
> to escape "&" in attributes, then shouldn't Lift decode each &
> back to "&" inside attributes upon page rendering?  ( and if that's
> the case, then couldn't that same test be used to prevent the need to
> escape the "&" in the first place?)
>

Lift yields valid XHTML to the browser.  & is valid xhtml,  is *not* valid XHTML and will be
rejected by your browser.


>
> I am using lift 1.1-SNAPSHOT
>
> Thanks for your comments.
>
> >
>


-- 
Lift, the simply functional web framework http://liftweb.net
Beginning Scala http://www.apress.com/book/view/1430219890
Follow me: http://twitter.com/dpp
Git some: http://github.com/dpp

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: Where did AnyVar go ?

2009-09-08 Thread David Pollak
Sorry.  I did an end of friday commit and forgot to add some untracked
files.
I moved a bunch of stuff from http to util so that that stuff could be used
more broadly.

If I've got bandwidth today, I'll write up the changes and how they can help
in a variety of situations.

On Mon, Sep 7, 2009 at 9:44 AM, Ross Mellgren  wrote:

>
>
> http://github.com/dpp/liftweb/commit/4dce48dfe938b92ae2ed50445dab1f4c2d104a4f
>
> Looks like DPP removed it, and based on the surrounding commit, maybe
> the intention was to put it in util somewhere, though the commit did
> not add it back anywhere.
>
> -Ross
>
> On Sep 7, 2009, at 9:21 AM, marius d. wrote:
>
> >
> > Same question for Injector, SimpleInjector etc.
> >
> > Br's,
> > Marius
> >
> > On Sep 7, 4:08 pm, Marius  wrote:
> >> Hi,
> >>
> >> I just did a pull and get a bunch of compile time errors obviously.
> >> Seems like someone kidnapped AnyVar?
> >>
> >> Br's,
> >> Marius
> > >
>
>
> >
>


-- 
Lift, the simply functional web framework http://liftweb.net
Beginning Scala http://www.apress.com/book/view/1430219890
Follow me: http://twitter.com/dpp
Git some: http://github.com/dpp

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: Some XML special chars rendered by lift, others not in 1.1-SNAPSHOT

2009-09-08 Thread David Pollak
On Mon, Sep 7, 2009 at 11:38 PM, jon  wrote:

>
> Hi,
>
> I've noticed that some special char xml tags are being interpreted by
> lift rather than passing through to the browser.
>
> source code in my template:
> 
>  &
>  ©
>  "
>  »
>  <
>  >
> 
>
> result from curl http://localhost:8080/
>
>  &
>  ©
>  "
>  »
>  <
>  >
>
>
> The rendered characters are problematic in IE7.


Why?


>  A fix or workaround
> would be much appreciated.
>

The raw XHTML is valid.  Lift is yielding non-ASCII characters, but they are
UTF-8 encoded and should be correctly rendered on all browsers.  I have
never seen a problem with IE6 or IE7 (I have not tested in IE8)


>
> Thanks,
>
> - Jon
> >
>


-- 
Lift, the simply functional web framework http://liftweb.net
Beginning Scala http://www.apress.com/book/view/1430219890
Follow me: http://twitter.com/dpp
Git some: http://github.com/dpp

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: solution to jetty:run locks files on windows problem

2009-09-08 Thread David Pollak
On Mon, Sep 7, 2009 at 3:05 PM, Timothy Perrett wrote:

>
> Thanks Jon, thats super.
>

Super +1


>
> Cheers, Tim
>
> On Sep 7, 7:25 pm, jon  wrote:
> > Done:
> http://wiki.github.com/dpp/liftweb/how-to-fix-file-locking-problem-wi...
> >
> > On Sep 7, 1:49 pm, Timothy Perrett  wrote:
> >
> >
> >
> > > Jon, good stuff - perhaps write this up on the wiki:
> >
> > >http://wiki.github.com/dpp/liftweb
> >
> > > Cheers, Tim
> >
> > > On Sep 7, 6:09 pm, jon  wrote:
> >
> > > > Hi all,
> >
> > > > If you happen to be developing under windows you will notice that mvn
> > > > jetty:run locks files and prevents editing while the server is
> > > > running.   Super annoying. The problem is that jetty memory maps
> files
> > > > by default and windows locks memory mapped files.  The solution is to
> > > > turn off the mapped files switch in jetty.  Instructions are here:
> >
> > > > "When using jetty:run, CSS and JavaScript files are locked - how can
> I
> > > > fix this?"http://appfuse.org/display/APF/FAQ
> >
>


-- 
Lift, the simply functional web framework http://liftweb.net
Beginning Scala http://www.apress.com/book/view/1430219890
Follow me: http://twitter.com/dpp
Git some: http://github.com/dpp

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: rewrite problem

2009-09-08 Thread Xavi Ramirez

That's because the url "post/show" is being intercepted by the same
rewrite rule that matches "post/" urls.  To get around this, try
adding an if statement to your rewrite rule:

LiftRules.rewrite.append {
  case RewriteRequest(ParsePath(List("post", id), _, _, _), _, _)
 if (id != "show") =>
RewriteResponse(List("post","show"), Map("id"->urlDecode(id)))

Hope this helps!

~Xavi

On Tue, Sep 8, 2009 at 12:12 AM, night_stalker wrote:
>
> I want to make RESTful urls (not REST API), for example:
>
>  "/post/123" is mapped to "post/show.html" with param "id=123"
>
> but the following rewrite rule seems recursive
>
>    LiftRules.rewrite.append {
>      case RewriteRequest(ParsePath(List("post", id), _, _, _), _, _)
> =>
>        RewriteResponse(List("post","show"), Map("id"->urlDecode(id)))
>    }
>
> and loops forever ...
>
> >
>

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: Crazy idea for lift's mega proto user: admin panel.

2009-09-08 Thread marius d.

Nice thoughts but personally I don't think this should be part of Lift
core framework. However an admin panel could be provided via a lift
widget and would be pretty interesting thing to have.

Br's,
Marius

On Sep 8, 2:16 am, DFectuoso  wrote:
> I was thinking about how wonderful it is to get a login/register/
> forgotPassword functionality with mega proto user and how it could
> become even better with a good tool for creating an admin section.
>
> I'm just adding the idea here so maybe if other people find value it
> could be considered for development(or probably it already is, i don't
> know).
>
> Adding an admin panel to mega proto user where the moderators/admins
> could change some options(like the way a user is validated, if gzip is
> enabled, etc) would be great for the end users of our apps, since it
> would be easier to change and maintain the site.
>
> Being a administrator at a Invision Power Board forum and having a
> couple of wordpress blogs, i see a lot of potential on this as a admin/
> dev tool! Listing some of the things that i can imagine in this panel
> are:
>
> -phpMyAdmin-type of DB admin(browse your data easily, remove/change/
> add stuff to it without having to create a CRUD for each thing)
> -execute queries
> -List the actor(and comet actors) with possibility to kill/reset them
> -Memory use analysis.
> -Statistics of use(hits, referrals, etc)
> -Options (any object/class/trait could have a val foo =
> adminPanel.option("category","optionName","description",defaultValue,
> otherValues[]) and be included in this place, of course the categories
> could create different menus.
> -User management(ban, authorize, give admin-rights).
> -Simple to-do list that all admins can edit
> -Log of errors/warnings/exceptions
> -Css editor
> -Easy-logo changer
> -File Manager(upload your images and stuff here)
> -String editor (you can change any default string from the
> megaprotouser forms and the index?)
>
> Also, a very polemic(and i think bad idea, but its common to see this
> in admin panels):
> ->Installable plug-ins for this panel
>
> I know this seems like one step away from being a full blown CMS,
> forum, blog, etc. But if its extensible while we are building an app,
> it will be very useful for the different moments of development and
> use.
>
> Of course i don't expect any of this to be done right now, i
> understand there are a couple of integrations and bigger things going
> on but i really wanted to brainstorm on this with you guys!
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---