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
>>> > .
>>> > 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.
>>> 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.
>> 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.
> 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.
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en.


Reply via email to