Hi David & Ross,

Thank you for your help,
I understand RequestVar now, which muse be used in the same request.

My case is that I have a tree and a separate button.
When use click the tree node, the separate button should know which node is
selected.

Right now I replace the separate button when use click the tree node and it
worked.
I don't want to use session and I think it's better not replace the button.
But I don't have idea how to do.

On Tue, Dec 8, 2009 at 12:49 PM, David Pollak <feeder.of.the.be...@gmail.com
> wrote:

>
>
> On Mon, Dec 7, 2009 at 8:46 PM, Xuefeng Wu <ben...@gmail.com> wrote:
>
>> My current solution is that when user select a tree node, I replace the
>> add button dependence on the node.
>
>
> If you can create a very simple example of what you're trying to do, we can
> help you debug the actual, runnable code.
>
>
>>
>>
>> 2009/12/8 Xuefeng Wu <ben...@gmail.com>
>>
>> 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.isdid 
>>>>> 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
>>>
>>
>>
>>
>> --
>> 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<liftweb%2bunsubscr...@googlegroups.com>
>> .
>> For more options, visit this group at
>> http://groups.google.com/group/liftweb?hl=en.
>>
>
>
>
> --
> Lift, the simply functional web framework http://liftweb.net
> Beginning Scala http://www.apress.com/book/view/1430219890
> Follow me: http://twitter.com/dpp
> Surf the harmonics
>
> --
> You received this message because you are subscribed to the Google Groups
> "Lift" group.
>
> To post to this group, send email to lift...@googlegroups.com.
> To unsubscribe from this group, send email to
> liftweb+unsubscr...@googlegroups.com<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