Well so you're using it from your own actor. I would not recommend
this due to state preservation. I mean S context is very likely lost
because your LiftActor is running on a different thread. What you need
is to pass the LiftSession instance to your LiftActor say using some
distinct message like:

case class Init(session: LiftSession)

then in your messageHandler


 protected def messageHandler = {
       case FileManagerMsg(someMsg) =>
       {
         S.initIfNotInitted(session) {
            var fileList = listFilesInDir("/Users/soumik/Movies/")
            Log.info("OUTPUT: " + fileList)
         }
       }

}

But I'm not sure from your code wht you do with the output of your
listFilesInDir since that never gets to be rendered.

I strongly recommend using CometActor whenever you want to render
something asynchronously. It does a lots of good things for you.

Br's,
Marius


On Feb 16, 9:33 am, soumik <[email protected]> wrote:
> Hi Marius,
>
>  Thanks for your response. I'm sorry for mis-communicating my problem
> earlier. As you pointed out the problem doesn't occur when the call to
> the function is made from a CometActor.
> In my case too, it was not a CometActor. Rather, it was the LiftActor.
> (Sometime back we had different CometActors for different feature
> threads, now we have 1 single CometActor which takes care of the
> display and different LiftActor threads which do the feature related
> stuff. Hence the confusion on my part).
>
> Anyways, here's the relevant code:
> -------------------------------------
> object TheVideoPlayerThread extends LiftActor
> {
>    val threadName = "FileManager"
>
>    def listFilesInDir(dirName:String): NodeSeq =
>    {
>       Log.info("Recursing for: " + dirName)
>       val files = (new java.io.File(dirName)).listFiles
>
>       def showFile1() = "AAA"
>
>       <li class="fileElem" id="dir">{dirName}</li>
>          <ul>
>          {files.flatMap(f => {
>               if (f.isDirectory())
>               {
>                  Log.info("Directory: " + f.toString)
>                  listFilesInDir(f.toString)
>               }
>               else
>               {
>                  Log.info("Regular file: " + f.getName)
>                  <li class="fileElem" id="regfile">
>                   {SHtml.link("", () => showFile1,
> Text(f.getName)) }                   //This is the line causing the
> issue
>                  </li>
>               }
>            }
>          )}
>          </ul>
>    }
>
>    protected def messageHandler = {
>        case FileManagerMsg(someMsg) =>
>        {
>            var fileList = listFilesInDir("/Users/soumik/Movies/")
>            Log.info("OUTPUT: " + fileList)
>        }
>   }
> -------------------------------------
> (I've omitted some of code in this thread which are not related to the
> file listing functionality.)
> The problem I see is as soon as I encounter the first file in the
> directory specified, it prints - "Regular file: <filename>", but after
> that I don't see the log - "OUTPUT - ...". The function never returns.
> Same function works perfectly in a CometActor and I see the nodeseq of
> files in <li> tags to be rendered.
> Also in the same method in my LiftActor object, if I replace the line:
> {SHtml.link("", () => showFile1, Text(f.getName)) }
> with just
> {f.getName}
> I see the function return and print the log "OUTPUT - .." with the
> list of all the files as <li> entries.
>
> I'm sorry I couldn't give a more concrete example which you could run
> and reproduce the issue. I'll appreciate if you could just give this
> function a try from any LiftActor object and check the output on
> console.
>  Also, I'm still on 1.1-SNAPSHOT. I've a fairly big codebase, so not
> sure if migrating to 2.0-SNAPSHOT will cause any other issues,
> particularly with jquery(i'm using lot of jquery plugins dependent on
> 1.3.2, not sure if all of them works nicely with 1.4).
>
> Thanks,
> Soumik
>
> On Feb 15, 11:22 pm, Marius <[email protected]> wrote:
>
>
>
> > I don't think the cause is in SHtml. I tried your code from a snippet
> > and from a Comet actor and there was no lock whatsoever. But I did use
> > lift 2.0-SNAPSHOT. can you try with 2.0-SNAPSHOT ?
>
> > Br's,
> > Marius
>
> > On 15 feb., 15:20, soumik <[email protected]> wrote:
>
> > > Hi,
> > >  I'm using 1.1-SNAPSHOT lift release and am experiencing strange
> > > behaviour when trying to output a NodeSeq formed from nested NodeSeq &
> > > Scala code.
>
> > > To highlight the problem let me show you the code I'm trying to
> > > execute:
> > > -----------------------------------
> > > def listFilesInDir(dirName:String): NodeSeq =
> > >    {
> > >       Log.info("Recursing for: " + dirName)
> > >       val files = (new java.io.File(dirName)).listFiles
>
> > >       def playFile1() = "AAA"
>
> > >       <li class="fileElem" id="dir">{dirName}</li>
> > >          <ul>
> > >          {files.flatMap(f => {
> > >               if (f.isDirectory())
> > >               {
> > >                  Log.info("Directory: " + f.toString)
> > >                  listFilesInDir(f.toString)
> > >                  <span></span>
> > >               }
> > >               else
> > >               {
> > >                  Log.info("Regular file: " + f.getName)
> > >                  <li class="fileElem" id="regfile">
> > >                   {SHtml.link("", () => playFile1,
> > > Text("Something")) }                 /* Problem in this line */
> > >                  </li>
> > >               }
> > >            }
> > >          )}
> > >          </ul>
> > > -----------------------------------
> > > I'm trying to render the output of the above function in a comet
> > > actor. The problem i see is with the highlighted line of code. When
> > > the execution reaches this line of code, it gets stuck; the function
> > > doesn't return and i don't get a NodeSeq to render.
> > > However, for some reason if I change the highlighted line of code to
> > > say:
> > > {f.getName}
> > > I get the proper NodeSeq which lists all the files in the directory.
>
> > > Seems to me that the SHtml class functions are encountering an error
> > > scenario(frm which its unable to recover). I've tried a couple of
> > > SHtml functions(a, text, link, submit etc.) all of them show the same
> > > problem, but if I use some other scala code it executes properly.
>
> > > Could anyone look into this and verify whether this is indeed a bug
> > > with the SHtml functions?
>
> > > Thanks,
> > > Soumik

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

Reply via email to