在 Scala 中使用 json 对象的 play 框架

2024-03-02

你好,我是 scala play 框架的初学者。我创建了一个简单的注册表单并连接到 mysql 来插入行。效果很好。现在我想在同一页面上显示这些插入的行,而不使用 json 刷新页面。请建议我一个想法如何在同一页面上获取插入的行。提前致谢。这是我的以下代码

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

控制器:学生控制器

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."))
  }

}

Models:

封装型号

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>


}

}

索引.scala.html

@main("Welcome to Play 2.0") {

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

请建议我一个想法,将插入的数据存储在 JSON 对象中,并将相同的插入行存储在 scala 的同一页面上。提前致谢


使用 json 读取和写入,然后将 Student 作为对象传递给您的 create 方法:

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 提交的表单,将带有名字和姓氏的学生对象传递给创建方法,然后重新渲染或附加到学生列表。您可以通过返回新添加的学生,然后附加结果,或者再次调用数据库来获取整个学生列表并呈现整个列表,从而将响应传回。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Scala 中使用 json 对象的 play 框架 的相关文章

  • 在 Scala 中生成数字的质因数

    如何在 Scala 中生成整数的因子 这是我的看法1 def factorize x Int List Int def foo x Int a Int List Int if a gt Math pow x 0 5 return List
  • 将 Scala 文件转换为 Dll

    我有一些使用 IntelliJ 和 SBT Plugin 编写的 scala 代码 并希望将代码作为 C 的 DLL 提供给我 我已经尝试使用 ikvmc 我通过 package 将所有类打包在一个罐子中 之后 我手动设置一个 jar 其中
  • Scala中如何将DataFrame转换为RDD?

    有人可以分享一下如何转换dataframe to an RDD Simply val rows RDD Row df rdd
  • Scala 2.10、Double.isNaN 和拳击

    在 Scala 2 10 中 是someDouble isNaN预计装箱 运行我的代码调用 isNaN通过反编译器 我仍然看到对double2Double在我的代码中 鉴于新的AnyVal在 2 10 中工作 我希望它不会比java lan
  • Either 相当于受检查的异常吗?

    从 Scala 开始并阅读有关Either我很自然地将新概念与我所知道的东西 在本例中来自 Java 进行比较 与之前有什么区别吗concept检查异常和Either 在这两种情况下 失败的可能性在方法中明确注释 throws或返回Eith
  • 不使用 CPU 时 Cassandra 超时

    我使用 Phantom DSL 和 Datastax Cassandra 驱动程序时遇到 Cassandra 超时 然而 Cassandra 似乎并没有超载 以下是我得到的异常 com datastax driver core except
  • Scalaz 7 Iteratee 处理大型 zip 文件(OutOfMemoryError)

    我正在尝试使用 scalaz iteratee 包在恒定空间中处理大型 zip 文件 我需要对 zip 文件中的每个文件执行一个长时间运行的进程 这些进程可以 并且应该 并行运行 我创建了一个EnumeratorT使每个膨胀ZipEntry
  • 简单的 Scala actor 问题

    我确信这是一个非常简单的问题 但很不好意思地说我无法理解它 我有一个 Scala 值列表 我想使用演员来并行地对每个值进行一些 外部 调用 我想等到所有值都已处理完毕 然后继续 没有共享值被修改 有人可以建议吗 Thanks Scala 中
  • 为什么调用 take() 方法时 Slick 会生成子查询

    I use Slick http slick typesafe com 1 0 0 RC1 我对表对象有这样的定义 object ProductTable extends Table Int String String String Dou
  • scala/spark 代码不允许在 hive 中添加列

    如果源数据有新列 我尝试在 Hive 表中添加一列 所有新列的检测都运行良好 但是 当我尝试将列添加到目标表时 我收到此错误 for f lt df schema fields if f name chk spark sqlContext
  • 将 Scala 库转换为 DLL (.NET)

    我正在尝试从 scala 类创建一个 Dll 我将 IntelliJ 与 SBT 一起使用 我已经找到了一种使用 ikvm converter 将 jar 文件转换为 Dll 的方法 现在的问题是 当我在 SBT 下使用 package 从
  • Scala:具有复杂结构的树插入尾递归

    我正在 scala 中创建自定义对象树 并且我的插入方法引发堆栈溢出 因为它不是尾递归 但是 我不太清楚如何使其尾递归 我见过使用 累加器 变量的相关示例 但它们要么是只能相乘和覆盖的整数之类的东西 要么是我在适应树时遇到困难的列表 这是我
  • 宏:knownDirectSubclasses 被嵌套类型破坏?

    我有一个宏 它枚举密封特征的直接子类型 import scala reflect macros Context import language experimental macros object Checker def apply A U
  • 使用原始类型模拟案例类

    考虑以下类型结构 trait HasId T def id T case class Entity id Long extends HasId Long 比方说 我们想在一些测试中模拟实体类 val entityMock mock Enti
  • 如何从 SparkSQL DataFrame 中的 MapType 列获取键和值

    我的镶木地板文件中有数据 该文件有 2 个字段 object id String and alpha Map lt gt 它被读入 SparkSQL 中的数据帧 其架构如下所示 scala gt alphaDF printSchema ro
  • 通用特征的隐式转换

    我正在实现一个数据结构 并希望用户能够使用任何类型作为密钥 只要他提供一个合适的密钥类型来包装它 我有这个关键类型的特质 这个想法是进行从基类型到键类型的隐式转换 反之亦然 实际上 只使用基类型 该特征看起来像这样 trait Key T
  • Java 表达式树 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有相当于 net的 LINQ 下的表达式树JVM 我想实现一些类似 LINQ 的代码结构Scala
  • 使用 Spark DataFrame 获取组后所有组的 TopN

    我有一个 Spark SQL DataFrame user1 item1 rating1 user1 item2 rating2 user1 item3 rating3 user2 item1 rating4 如何按用户分组然后返回TopN
  • 在 Scala 和 SBT 中调试较长的编译时间

    在我的 Scala SBT 项目中 我有一个文件需要 5 分钟才能编译 所有其他的都可以在几秒钟内编译 这使得开发非常痛苦 我确信我滥用了一些 Scala 构造 但我不知道如何调试它 如何在 Scala 中调试较长的编译时间 我正在使用 S
  • 使用 scala 集合 - CanBuildFrom 麻烦

    我正在尝试编写一个接受任何类型集合的方法CC 并将其映射到一个新的集合 相同的集合类型但不同的元素类型 我正在挣扎 基本上我正在尝试实施map but 不在集合本身上 问题 我正在尝试实现一个带有签名的方法 它看起来有点像 def map

随机推荐

  • 使用 AWS API Gateway 进行 API 版本控制

    我在使用 API Gateway Lambda 实现可行的版本控制方案时遇到问题 我的要求是在 API 级别进行主要版本控制 然后在服务级别进行次要版本控制 我的环境也分布在多个帐户中 因此暂存不是环境传播的选项 有人使用 AWS API
  • 如何构建 libjpeg 供 ndk 使用

    我下载了 libjpeg 8d 源代码 我想将其编译为 libjpeg so 可以在 android ndk 中使用 因为ndk使用arm架构 但我的PC的gcc是x86架构 所以当我使用gcc编译出libjpeg so并将其放入jni文件
  • 如何从终端重新加载 Google Chrome 标签?

    有没有办法仅使用终端在 Ubuntu 中重新加载 Google Chrome 选项卡 我不想只是打开一个新窗口 而是要实际刷新一个选项卡 额外问题 这在其他浏览器 例如 Opera Safari Firefox 中也可能吗 一个衬垫将聚焦
  • 如何将 django 调试工具栏设置为仅适用于某些用户?

    马上 是的 我知道 INTERNAL IPS 我即将在工作集成和测试中打开我的 Django 应用程序 我知道将会进行调试并进行大量修改和 或优化 所以我很乐意Django 调试工具栏 https github com django deb
  • 使用 URL 加载底部导航栏项目图标内的图像

    我正在尝试使用底部导航栏的项目图标内的 firebase 存储 url 加载个人资料图像 这是我的代码 Glide with getApplicationContext asBitmap load profilePicUrl into ne
  • AttributeError:尝试在 Discord.py 中创建按钮时,模块“discord”没有属性“ui”

    我想知道如何使用discord py 制作按钮 这将是我想要的一个例子 My Code import discord from discord ext import commands client commands Bot command
  • 如何知道按下的是什么字符键?

    我想知道在纯 Javascript 中以跨浏览器兼容的方式按下了什么字符键 清除 JavaScript function myKeyPress e var keynum if window event IE keynum e keyCode
  • 节省内存和编译时间

    有什么方法可以使用模块在 perl 中节省内存和编译时间吗 例如 不加载所有不必要的 未使用的子程序 或者 如果我将我的潜艇分成许多不同的 这是一个好方法pm文件 然后我只加载必要的模块 例如 usr bin perl w sub mysu
  • mkdir() 不工作

    My code mkdir some absolute path 0777 and mkdir relative path 0777 不起作用 安全模式已关闭 我什至尝试将所有父文件夹设置为 777 有任何想法吗 编辑 我确实打开了错误报告
  • 如何从memfd_create获取内存地址?

    在我的应用程序中我需要共享内存 父母和孩子之间 使用fork execl 我用memfd create分配内存 因为它提供了 文件描述符 可以方便地在子进程中使用 进程 描述符通过dup2 before execl 附加到分配的内存 我不使
  • 扁平列表和免费 monad

    我试图说服自己 List monad 具有平面列表 列表串联和按元素映射的列表 不是一个自由 monad 准确地说 是与某个函子 T 关联的自由 monad 据我了解 我应该能够通过以下方式实现这一目标 首先在 monad 列表中找到常用运
  • 如何将 JSON 转换为 GeoJSON

    我对 javascript 的学习还很陌生 我的基础知识已经碰壁了 我已经设置了一个传单地图 我希望从 JSON 中的绳索上绘制基于 divIcon 的标记 通过我无数次的研究 试图让它发挥作用 我了解到为什么我的 JSON 文件无法工作
  • Matplotlib imshow 中内存使用过多

    我有一个 PyQT4 应用程序 可以在 Matplotlib 图中显示中等大小的图像 我显示的测试图像约为 5Mb 2809 x 1241 像素 顺便说一下 我使用GDAL读取数据 图像被读入数组 其中无数据值被屏蔽 然后用标准化值和指定的
  • NetworkX - 删除节点并重新连接边

    我在图中有一个节点 充当一种 临时连接器 节点 我想删除该节点并更新图中的边 以便其所有直接前驱节点都指向其直接后继节点 是否有内置功能可以做到这一点networkx 或者我需要推出自己的解决方案吗 Example 我有一个图表1 gt 2
  • Kubectl设置环境变量并运行命令

    我有一个在 Kubernetes 上运行的容器 我想在其中从本地终端运行命令 基于其 yaml 文件的容器的工作目录位于 opt gopath src a 但是 我想在目录中运行命令 opt gopath src b 此外 在运行此命令之前
  • OpenCV 和 Python 的书籍? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何关闭ViteJS的模块热加载功能?

    我有一个服务器端渲染production模式Vite应用 我的问题是 网页通常会重新加载并且控制台将显示 vite connecting 我将此追溯到 vite 代码库的热模块重新加载部分 然而 我不想hmr on for producti
  • ggbiplot - 如何不在图中使用特征向量

    我有一个数据集数据 cell line sva 其暗淡为 313 11875 cc pca lt prcomp data cell line sva center TRUE scale TRUE retx TRUE g lt ggbiplo
  • Spring Boot 和 Maven 战争叠加

    我正在使用 Maven 多模块 其中一场战争取决于另一场战争 Spring Boot Web 应用程序依赖于一个仅提供 html 文件的基本 Web 应用程序 当我运行 Spring Boot 应用程序时 我可以从主 web 应用程序 Sp
  • 在 Scala 中使用 json 对象的 play 框架

    你好 我是 scala play 框架的初学者 我创建了一个简单的注册表单并连接到 mysql 来插入行 效果很好 现在我想在同一页面上显示这些插入的行 而不使用 json 刷新页面 请建议我一个想法如何在同一页面上获取插入的行 提前致谢