2010-10-20 8 views
1

Salutationsacteur scala lift, erreur: type mismatch;

J'utilise la version 2.8.0 scala et la version 2.1 de levage pour compiler mon projet avec Maven je marque l'erreur suivante:

 
error: type mismatch; 

[INFO] required: **scala.actors.Actor** 
[INFO]  Auctioneer !? AddListener(**this**, this.itemId) match { 
[INFO]        ^

error: type mismatch; 

[INFO] required: **scala.actors.Actor** 
[INFO]  Auctioneer ! RemoveListener(**this**, this.itemId) 
[INFO]        ^

le fichier est:

package org.developerworks.comet 

import net.liftweb.http._ 
import net.liftweb.common.Full 
import net.liftweb.http.S._ 
import net.liftweb.http.SHtml._ 
import net.liftweb.http.js.JsCmd 
import net.liftweb.http.js.JsCmds._ 
import net.liftweb.http.js.JE._ 
import net.liftweb.util.Helpers._ 
import net.liftweb.util._ 
import scala.xml.NodeSeq 
import org.developerworks.model._ 
import org.developerworks.actor._ 
import java.lang.Long 


class AuctionActor extends CometActor { 


    var highBid : TheCurrentHighBid = null 

    override def defaultPrefix = Full("auction") 

    val itemId = S.param("itemId").map(Long.parseLong(_)).openOr(0L) 


    def render = { 

    def itemView: NodeSeq = { 

     val item = if (itemId > 0) 
     ItemMetaData.findByKey(itemId).openOr(ItemMetaData.create) 
     else ItemMetaData.create 
     val currBid = item.highBid 
     val bidAmt = if (currBid.user.isEmpty) 0L else currBid.amount.is 
     highBid = TheCurrentHighBid(bidAmt, currBid.user.obj.openOr(User.currentUser.open_!)) 
     val minNewBid = highBid.amount + 1L 
     val button = <button type="button">{S.?("Bid Now!")}</button> % 
     ("onclick" -> ajaxCall(JsRaw("$('#newBid').attr('value')"), bid _)) 
     (<div> 
      <strong>{item.name}</strong> 
      <br/> 
      <div> 
      Current Bid: ${highBid.amount} by {highBid.user.niceName} 
      </div> 
      <div> 
      New Bid (min: ${minNewBid}) : 
      <input type="text" id="newBid"/> 
      {button} 
      </div> 
      {item.description}<br/> 
     </div>) 
    } 

    bind("foo" -> <div>{itemView}</div>) 

    } 


    def bid(s:String): JsCmd = { 

    val user = User.currentUser.open_! 
    Auctioneer ! BidOnItem(itemId, Long.parseLong(s), user) 
    Noop 

    } 


    override def localSetup { 

    Auctioneer !? AddListener(this, this.itemId) match { 

     case Success(true) => println("Listener added") 
     case _ => println("Other ls") 

    } 

    } 


    override def localShutdown { 

    Auctioneer ! RemoveListener(this, this.itemId) 

    } 


    override def lowPriority : PartialFunction[Any, Unit] = { 

    case TheCurrentHighBid(a,u) => { 
     highBid = TheCurrentHighBid(a,u) 
     reRender(false) 
     } 
    case _ => println("Other lp") 

    } 


} 

quelqu'un peut me dire que je suis manquant ou que je fais mal

J'ai compilé ce projet dans la version 2.7.3 et n'ai eu aucun problème

aidez s'il vous plaît !!!

Répondre

3

Les acteurs de Lift ne sont plus des acteurs Scala. Il peut être un moyen pour eux d'interopérer, mais je suggérerais d'abord de changer tous vos acteurs afin qu'ils soient Lift Actors.

1

Vous pouvez utiliser Scala Actors et Lift Actors dans le même projet, mais vous ne pouvez pas les remplacer les uns par les autres. Ils utilisent des implémentations complètement différentes du système Actor, donc ils ne peuvent pas, autant que je sache, s'envoyer des messages les uns aux autres.

Dans les projets Lift, j'utilise généralement LiftActors pour mes singleton, des acteurs nommés qui recevront des messages explicitement envoyés. Pour faciliter la lisibilité, j'utiliserai des acteurs Scala pour des tâches d'arrière-plan telles que la consignation des écritures dans la base de données:

actor { mapper.save } 
Questions connexes