2013-06-01 3 views
2

Привет, я начинаю использовать scala play framework. Я создал простую регистрационную форму и подключился к mysql для вставки строк. Он работал хорошо. Теперь я хочу отображать вставленные строки на одной странице без обновления страницы с помощью json. Просьбе предложить мне идею, как получить вставленные строки на один и то же page.Thanks в advance.Here моего следующего кодplay framework, работающий с объектами json в Scala

Routes: 
# Home page 
GET /controllers.Application.index 
GET  /createform     controllers.StudentController.createform() 
POST /save     controllers.StudentController.save()  

Контроллера: Student контроллер

package controllers 

import play.api.mvc._ 
import play.api.data._ 
import play.api.data.Forms._ 

import scala.collection.mutable.HashMap 

import views.html 
import models.Student 

object StudentController extends Controller { 


val studentform= Form (

tuple(
"firstname"->text, 
"lastname"->text 
    ) 
) 
def createform = Action { 

Ok(html.createform(studentform)) 

} 

def save = Action { implicit request=> 

studentform.bindFromRequest.fold(
errors=> BadRequest(html.createform(errors)), 
{ 
    case(firstname,lastname)=>Student.create(firstname,lastname) 
    Redirect(routes.Application.index()) 
} 

    ) 

} 

} 

Application Controller 

package controllers 

import play.api._ 
import play.api.mvc._ 

object Application extends Controller { 

    def index = Action { 

    Redirect(routes.StudentController.createform) 
    //Ok(views.html.index("Your new application is ready.")) 
    } 

} 

Модель:

пакет модели

import play.api.db._ 
import play.api.Play.current 

import anorm._ 
import anorm.SqlParser._ 

case class Student (

    id:Pk[Long]=NotAssigned, 
    firstname: String, 
    lastname: String 

) 


object Student { 

def create(firstname: String,lastname:String) : Unit={ 

DB.withConnection{ implicit Connection=> 

SQL("insert into student (Firstname,Lastname)" + "values({firstname},{lastname})" 
).on(
'firstname->firstname, 
'lastname->lastname 
).executeUpdate() 
    } 

} 

}

вид createform.scala.html

@(studentform: Form[(String,String)]) 

@import helper._ 

@main(title="Student Registration Form"){ 

@form(action=routes.StudentController.save){ 

    <fieldset> 
<legend>Add Student</legend> 

@inputText(
field=studentform("firstname"), 
args='_label->"FirstName" 
) 

@inputText(
field=studentform("lastname"), 
args='_label->"LastName" 
) 
<br/> 
<div class="actions"> 
<input type="submit" value="Submit"> 
<a href="@routes.Application.index">Cancel</a> 
</div> 

    </fieldset> 


} 

} 

index.scala.html

@main("Welcome to Play 2.0") { 

    <a href="/createform">Add a new Student</a> 
} 

любезно предложить мне идею для хранения данных, вставленные в объекте JSON и те же строки, вставленные в тот же страницы в scala.Thanks заранее

+0

Что касается меня, то ваш вопрос непонятен, какова ваша проблема, вы не знаете, как создать «json object» из вашего «студенческого объекта»? Или как создать 'Json response' или как манипулировать им на вашей странице? – arussinov

ответ

1

Использование json читает и записывает, а затем передает учащимся как объект для вашего метода создания:

object Student { 

    implicit object PkFormat extends Format[Pk[Long]] { 
    def reads(json: JsValue):JsResult[Pk[Long]] = JsSuccess(Id(json.as[Long])) 
    def writes(id: Pk[Long]):JsNumber = JsNumber(id.get) 
    } 

    implicit val studentReads: Reads[Student] = (
    (__ \ "id").readNullable[Pk[Long]].map(_.getOrElse(NotAssigned)) ~ 
    (__ \ "firstname").read[String] ~ 
    (__ \ "lastname").read[String] 
)(Student.apply _) 

    implicit val studentWrites = Json.writes[Student] 

    def create(student: Student): Student = { 
    DB.withConnection { implicit c => 

     val id: Long = student.id.getOrElse { 
     SQL("select next value for student_id_seq").as(scalar[Long].single) 
     } 

     SQL(
     """ 
      insert into student values (
      {id}, {firstname}, {lastname} 
     ) 
     """ 
    ).on(
     'id -> id, 
     'firstname -> student.firstname 
     'lastname -> student.lastname 
    ).executeUpdate() 

     student.copy(id = Id(id)) 
    } 
    } 

} 

Тогда «та же страница» может быть просто формой отправки ajax, передающей объект-ученик с именем и фамилией методу создания, затем повторным рендерингом или добавлением к списку учеников. Вы можете передать ответ обратно, вернув недавно добавленного студента, затем добавив результат или снова вызвав db для всего списка студентов и отобразив весь список.

Смежные вопросы