Hi Ross,

Yes it's not in the same request.

My case is:
When user select a tree node, I want to store this nodeId and If user click
a button to create a child node, I want to get the selected node.

I use ModalDialog when user click the button to create now node.

On Tue, Dec 8, 2009 at 11:50 AM, Ross Mellgren <dri...@gmail.com> wrote:

> I'm sorry, I'm having trouble following your code, I think too much of the
> surrounding code and templates is missing for me to reason about why you
> would have a problem.
>
> I set up a quick example app, so maybe the code from that will help you. It
> is here:
>
> http://github.com/Dridus/test-rqvarlog
>
> If I understand you correctly, you're getting a log message like this one:
> WARN - RequestVar test.snippet.HelloWorld$myVar$_ was set but not read
>
> This message is from the code I posted:
>
> package test.snippet
>
> import _root_.scala.xml.NodeSeq
> import _root_.net.liftweb.http.RequestVar
> import _root_.net.liftweb.util.Helpers
> import Helpers._
>
> class HelloWorld {
>     object myVar extends RequestVar[Int](0)
>
>     def howdy(in: NodeSeq): NodeSeq = Helpers.bind("b", in, "time" -> (new
> _root_.java.util.Date).toString)
>
>     def increment(in: NodeSeq): NodeSeq = {
>         myVar.set(myVar.is + 1)
>         <div>increment called</div>
>     }
>
>     def show(in: NodeSeq): NodeSeq = <div>show called -- myVar.is {
> myVar.is }</div>
> }
>
>
> <lift:surround with="default" at="content">
> <h2>Welcome to your project!</h2>
> <p>
>       <lift:helloWorld.howdy>
>         <span>Welcome to test-rqvarlog at <b:time/></span>
>       </lift:helloWorld.howdy>
>
>       <lift:HelloWorld.increment />
>       <lift:HelloWorld.increment />
> <!--      <lift:HelloWorld.show /> -->
>     </p>
> </lift:surround>
>
> If I uncomment the line with HelloWorld.show in the template, the log
> message goes away because myVar.is is called.
>
> If you are still getting the message, then that should mean that you are
> not calling myVar.is in the same request.
>
> HTH,
> -Ross
>
> On Dec 7, 2009, at 10:28 PM, Xuefeng Wu wrote:
>
> My code :
>
>
> object CompetenceMgr {
>
>  Menu(Loc("Competence", List("competence", "index"), S.?("Competence"),
> ifIsLoggedIn,
>      ...
>      Loc.Snippet("buildCompetenceDicRows", buildCompetenceDicRows),
>                    Loc.Snippet("addCompetenceB", addCompetenceB),
>                 ....
>
> private object *_categoryId *extends RequestVar[Long](0)
>
> //build a competenceDic table
>   def buildCompetenceDicRows(xhtml: NodeSeq): NodeSeq = {
>     ... ...
>     def *makeCategoryRow*(r: Category) = {
>          .....
>        def *categoryNode*: NodeSeq = {
>        def categoryNodeLinkId = "categoryNodeLinkId-" + r.id
>        def selectCategoryNode: JsCmd = {
>         * //here: set the _categoryId, but didn't work*
>           _categoryId.set(r.id.is)
>          ... ..
>        }
>          <span id={categoryNodeLinkId} class='node_span'>{a(() =>
> selectCategoryNode, Text(r.title.is))}</span>
>        }
>        <tr ><td><span class="folder draggable droppable"
>  id={categoeryId}>{categoryNode}</span></td></tr> % ("id" -> nodeId) %
> ("class" -> nodeClass)
>     }
>     def *buildCategoryRows*: NodeSeq = {
>       val resourceData = Category.categoriesTreeList
>       (empty /: resourceData)((l, r) => l ++ *makeCategoryRow*(r))
>       }
>      *buildCategoryRows*
>   }
>
>   //it's a button for create competence
>  def *addCompetenceB*(xhtml: NodeSeq): NodeSeq = doCompetenceB(xhtml,"add
> Competence",null)
>  //a button for create or edit competence
>   def *doCompetenceB*(xhtml: NodeSeq,msg: String,competence: Competence):
> NodeSeq = {
>         a(() => {
>               *//here I try to get the categoryId if it selected.*
>               val catId: Long = _categoryId.is
>              S.runTemplate(List("competence","_competence")).
>              map(ns =>
> ModalDialog(doCompetenceEditor(ns,catId,competence))) openOr
>              Alert("Couldn't find _competence template")},
>              Text(msg),"class" -> "button"
>               )
>   }
>
>
>
>
> On Tue, Dec 8, 2009 at 11:02 AM, Ross Mellgren <dri...@gmail.com> wrote:
>
>> Well if you logically expected it to be read but it wasn't, it might
>> indicate a bug to you or help in diagnosis.
>>
>> I'm not sure I understand your reply fully -- when you added myId.is did
>> the log message go away? If not, could you post your code?
>>
>> -Ross
>>
>> On Dec 7, 2009, at 9:39 PM, Xuefeng Wu wrote:
>>
>> I use myId.is but get nothing.
>> I don't know what I could do with the information.
>>
>> On Tue, Dec 8, 2009 at 10:19 AM, Ross Mellgren <dri...@gmail.com> wrote:
>>
>>> I think that message is just informative, letting you know that you don't
>>> seem to be using the request var fully (perhaps due to typo, or code
>>> refactoring that made it unused, or something.)
>>>
>>> I think it'll go away if you access the variable somewhere using myId.is
>>> .
>>>
>>> -Ross
>>>
>>> On Dec 7, 2009, at 9:02 PM, Xuefeng Wu wrote:
>>>
>>> Hi ,
>>>
>>> When I use RequestVar get the message: RequestVar ....... was set but not
>>> read
>>>
>>> My code like this:
>>> object MyMgr {
>>>   ...
>>>   Loc.Snippet("myFoo",myFoo)
>>>  ...
>>>    object myId extends RequestVar[Long](0)
>>>
>>>    def myFoo(xhtml: NodeSeq): NodeSeq = {
>>>             ....
>>>             def selectNode = {
>>>
>>>                 myId .set(vId)
>>>
>>>             }
>>>             ....
>>>            bind("",xhtml,
>>>                  "node"->a(() => selectNode, Text(nodeName))
>>>                 )
>>>    }
>>>
>>> }
>>>
>>> the RequestVar must be used at Class?
>>>
>>> On Sat, Nov 21, 2009 at 12:09 AM, Ross Mellgren <dri...@gmail.com>wrote:
>>>
>>>> RequestVar is the standard way of doing this. For example
>>>>
>>>> object MySharedInformation {
>>>>     object myData extends RequestVar[List[Thing]](loadThings)
>>>>     //                               ^^^^^^^^^^^  ^^^^^^^^^^
>>>>     //                    Type of thing to store  How to initialize
>>>> variable first time it's accessed
>>>>
>>>>     private def loadThings: List[Thing] = ...
>>>> }
>>>>
>>>> class Snippet1 {
>>>>     import MySharedInformation.myData
>>>>     def render(ns: NodeSeq): NodeSeq = {
>>>>         myData.is.map(thing => { ... })
>>>>     }
>>>> }
>>>>
>>>> class Snippet2 {
>>>>     import MySharedInformation.myData
>>>>     ...
>>>> }
>>>>
>>>> The lifetime of the value is during the current request processing and
>>>> any AJAX calls related to it.
>>>>
>>>> If you really want to initialize it in a snippet, then use a Box with
>>>> a RequestVar, like this:
>>>>
>>>> object MySharedInformation {
>>>>     object myData extends RequestVar[Box[List[Thing]]](Empty)
>>>> }
>>>>
>>>> class LoaderSnippet {
>>>>     import MySharedInformation.myData
>>>>     def render(ns: NodeSeq): NodeSeq = {
>>>>         myData.set(Full(...))
>>>>     }
>>>> }
>>>>
>>>> class ReaderSnippet {
>>>>     import MySharedInformation.myData
>>>>     def render(ns: NodeSeq): NodeSeq = {
>>>>         // If the data has not been loaded, default to an empty list
>>>>         val data = myData.is.openOr(Nil)
>>>>         ...
>>>>     }
>>>> }
>>>>
>>>> class OtherReaderSnippet {
>>>>     import MySharedInformation.myData
>>>>     def render(ns: NodeSeq): NodeSeq = {
>>>>         // Do two entirely different things if the data has versus
>>>> has not been loaded
>>>>         myData.is match {
>>>>             case Full(data) => // do something when the data has been
>>>> loaded
>>>>             case _ => // do something when the data has not been loaded
>>>>         }
>>>>     }
>>>> }
>>>>
>>>> HTH,
>>>> -Ross
>>>>
>>>>
>>>> On Nov 20, 2009, at 10:59 AM, Alex Black wrote:
>>>>
>>>> > I've got a template page, say foobar.html, that makes a number of
>>>> > calls to functions in a snippet, e.g. mysnippet.foo1, mysnippet.foo2,
>>>> > mysnippet.foo3.
>>>> >
>>>> > I'd like to do some initial work in foo1, e.g. retrieve some data and
>>>> > do some work on it, then in foo2 and foo3 display parts of that data.
>>>> >
>>>> > Whats the easiest way to do this? I think I misunderstood the lift
>>>> > book:
>>>> >
>>>> > "That means that for each request, Lift creates a new instance of the
>>>> > snippet class to execute. Any changes you make to instance variables
>>>> > will be discarded after the request is processed."
>>>> >
>>>> > I thought this meant that for a given HTTP request, there would be one
>>>> > (and only one) instance of my snippet, so I could call several of its
>>>> > methods and they could all access the snippet's member variables,
>>>> > which would then be discarded at the end of the request.
>>>> >
>>>> > Am I going about this wrong? should I only have one snippet function
>>>> > per template?
>>>> >
>>>> > Thx
>>>> >
>>>> > - Alex
>>>> >
>>>> > --
>>>> >
>>>> > You received this message because you are subscribed to the Google
>>>> > Groups "Lift" group.
>>>> > To post to this group, send email to lift...@googlegroups.com.
>>>> > To unsubscribe from this group, send email to
>>>> liftweb+unsubscr...@googlegroups.com<liftweb%2bunsubscr...@googlegroups.com>
>>>> > .
>>>> > For more options, visit this group at
>>>> http://groups.google.com/group/liftweb?hl=
>>>> > .
>>>> >
>>>> >
>>>>
>>>> --
>>>>
>>>> You received this message because you are subscribed to the Google
>>>> Groups "Lift" group.
>>>> To post to this group, send email to lift...@googlegroups.com.
>>>> To unsubscribe from this group, send email to
>>>> liftweb+unsubscr...@googlegroups.com<liftweb%2bunsubscr...@googlegroups.com>
>>>> .
>>>> For more options, visit this group at
>>>> http://groups.google.com/group/liftweb?hl=.
>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> Scala中文社区:  http://groups.google.com/group/scalacn
>>>
>>> --
>>> You received this message because you are subscribed to the Google Groups
>>> "Lift" group.
>>> To post to this group, send email to lift...@googlegroups.com.
>>> To unsubscribe from this group, send email to
>>> liftweb+unsubscr...@googlegroups.com.
>>> For more options, visit this group at
>>> http://groups.google.com/group/liftweb?hl=en.
>>>
>>>
>>>
>>> --
>>> You received this message because you are subscribed to the Google Groups
>>> "Lift" group.
>>> To post to this group, send email to lift...@googlegroups.com.
>>> To unsubscribe from this group, send email to
>>> liftweb+unsubscr...@googlegroups.com<liftweb%2bunsubscr...@googlegroups.com>
>>> .
>>> For more options, visit this group at
>>> http://groups.google.com/group/liftweb?hl=en.
>>>
>>
>>
>>
>> --
>> Scala中文社区:  http://groups.google.com/group/scalacn
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Lift" group.
>> To post to this group, send email to lift...@googlegroups.com.
>> To unsubscribe from this group, send email to
>> liftweb+unsubscr...@googlegroups.com.
>> For more options, visit this group at
>> http://groups.google.com/group/liftweb?hl=en.
>>
>>
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Lift" group.
>> To post to this group, send email to lift...@googlegroups.com.
>> To unsubscribe from this group, send email to
>> liftweb+unsubscr...@googlegroups.com<liftweb%2bunsubscr...@googlegroups.com>
>> .
>> For more options, visit this group at
>> http://groups.google.com/group/liftweb?hl=en.
>>
>
>
>
> --
> Scala中文社区:  http://groups.google.com/group/scalacn
>
> --
> You received this message because you are subscribed to the Google Groups
> "Lift" group.
> To post to this group, send email to lift...@googlegroups.com.
> To unsubscribe from this group, send email to
> liftweb+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/liftweb?hl=en.
>
>
>  --
> You received this message because you are subscribed to the Google Groups
> "Lift" group.
> To post to this group, send email to lift...@googlegroups.com.
> To unsubscribe from this group, send email to
> liftweb+unsubscr...@googlegroups.com<liftweb%2bunsubscr...@googlegroups.com>
> .
> For more options, visit this group at
> http://groups.google.com/group/liftweb?hl=en.
>



-- 
Scala中文社区:  http://groups.google.com/group/scalacn

--

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


Reply via email to