2016-12-20 6 views
0

Ich bin neu im Framework zu spielen. Im angegebenen Code wird activing/connect mit salesforce verbunden und zu/getObjects umgeleitet, aber nach der Umleitung wird die Salesforce-Verbindungsvariable "x" wieder null.Variablen werden nach der Umleitung zurückgesetzt [SCALA-PLAY]

package controllers 

import play.api.mvc.{Action, Controller} 

class ApplicationController extends Controller { 
    var x:connectBase = null 
    def connect(uname: String, pwd: String) = Action { 
    val con = SalesForceDump(uname, pwd) 
    con.connect 
    if (!con.isConnected) { 
     Ok("error") 
    } 
    else { 
     x = connectBase(con) 
     Ok("user:").withSession("connected" -> uname) 
     Redirect(routes.ApplicationController.getObjects) 
     // Ok("done") 
    } 
    } 

    def getObjects = Action { request => 
    println(x.connection) // this gets null 
    request.session.get("connected").map { user => 
     println("Hello " + user) 
     Ok(x.connection.getAllObjects.mkString(",")) 
    }.getOrElse { 
     Unauthorized("Oops, you are not connected") 
    } 
    } 
} 

Antwort

1

Ich vermute, Sie verwenden den injizierten Router (Standardkonfiguration einer Play-Anwendung).

Eine neue Instanz des Controllers wird für jede Anfrage erstellt, daher ist es "erwartet", dass Sie den Inhalt Ihrer Variablen verlieren.

Um es zwischen den Anforderungen zu halten, sollten Sie Ihren Controller als Singleton mit dieser Anmerkung erklären:

@javax.inject.Singleton 
class ApplicationController extends Controller { 
    ... 
} 

Sie jedoch irgendwann könnte fehlen. Diese Variable wird für alle Benutzer (verbunden oder nicht) freigegeben, die auf Ihre Anwendung zugreifen. Wenn Sie mehrere Instanzen Ihrer Anwendung hosten, wird diese Variable nicht für alle Ihre Anwendungsinstanzen repliziert. Sie könnten deswegen in Schwierigkeiten geraten.

Play-Anwendungen sind in der Regel als zustandslos zu verstehen, dh sie speichern keine Variablen, die sie für verschiedene Anforderungen verwenden. Wenn Sie Dinge speichern müssen, können Sie folgendes berücksichtigen:

  • mit einer Datenbank;
  • Verwendung eines Cookies für "kleine" Daten, die benutzerspezifisch sind.
Verwandte Themen