Где должен быть мой объект SessionVar? - PullRequest
3 голосов
/ 29 ноября 2011

Программирование на Lift (Scala) действительно стрессовое, у них обоих очень скудная документация, и немногие, что вы можете найти, являются неполными и вводящими в заблуждение.

Хорошо, я пытаюсь сохранить простую строку в SessionVar. Итак, один фрагмент заполнит значение этой строки с помощью формы, а в другом фрагменте я покажу строку в сеансе (или ее значение по умолчанию).

Что у меня пока есть:

Объект SessionVar:

// the SessionVar will contain a String with "Anonymous" as default value.
object myUser extends SessionVar[String]("Anonymous")

Фрагмент, где я заполняю строку:

object Login extends LiftScreen {

  val name = field("Name: ", "")

  def finish() {
    // set the SessionVar string with the string entered
    myUser.set(name)
    S.notice("Your name is: "+name)
  }
}

Фрагмент, где я показываю строку (другой фрагмент):

// show the string in SessionVar
"Your name: " + myUser.is
...

MyUser - это объект, который я сохраняю в сеансе. Большой вопрос: где мне хранить MyUser объект ? Я пробовал в Boot.scala и в двух фрагментах, но я получаю эту ошибку: not found: value myUser.

Где мне его хранить? Как я должен импортировать это? Как я могу заставить это работать?

1 Ответ

11 голосов
/ 29 ноября 2011

Вы можете поместить свой SessionVar в тот же «файл», что и LiftScreen, но вне определения объекта.

Примерно так:

package com.code.snippet
import ...

object myUser extends SessionVar[String]("Anonymous")
object Login extends LiftScreen {

  val name = field("Name: ", "")

  def finish() {
    // set the SessionVar string with the string entered
    myUser.set(name)
    S.notice("Your name is: "+name)
  }
}

Теперь, в вашем другом фрагменте, предполагая, что он находится в другом файле (я думаю, что это так, как вы используете LiftScreen, но если бы вы использовали обычный класс фрагмента, у вас могло бы быть несколько методов, отображающих части UI. В этом другом файле вам необходимо импортировать объект.

package com.code.snippet
import com.code.snippet.myUser
class MySnippet {
  render ={
    "#message" #> "Your name: " + myUser.is
  }  
}

Вы также можете сделать это так:

package com.code
package snippet
// notice the package split into two lines, making the import shorter.
import myUser
class MySnippet {
  render ={
    "#message" #> "Your name: " + myUser.is
  }  
}
...