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.