【问题标题】:Play 2 Framework dropdown List gives Null Point ExceptionPlay 2 Framework 下拉列表给出空点异常
【发布时间】:2012-09-12 19:06:49
【问题描述】:

我正在使用带有 java 和 ebean 的 play 2 框架进行数据管理。我的下拉列表有问题。下拉列表中填充了来自 mySQL 数据库的数据。它正在工作,但看起来我不小心改变了一些东西,现在当我尝试渲染页面时它给了我一个空指针异常。 我正在尝试解决问题,但看起来无法解决问题。我在下面提供了代码 sn-ps。

这是填充下拉列表的代码:

public static Result gestureNames()
  {
  List <GestureClassEntity> gcet = GestureClassEntity.find.orderBy("name asc").findList();
  return ok(views.html.train.render(gcet)); 
}

这是该方法的路由配置:

GET    /name                        controllers.Application.gestureNames()

这是更新路由文件:

# Home page
GET     /                           controllers.Application.index()
GET     /socket                     controllers.Application.webSocket()
GET     /cobject                    controllers.Application.classifyObject()
GET    /classify                    controllers.Application.classify()
GET    /name                        controllers.Application.gestureNames()
GET    /train                       controllers.Application.train()
GET    /tclassifier                 controllers.Application.trainClassifier()

这些是火车和手势名称方法

public static Result train()
  {   
      return ok(train.render(null));
  }

  public static Result gestureNames()
  {
  List <GestureClassEntity> gcet = GestureClassEntity.find.orderBy("name asc").findList();
  return ok(views.html.train.render(gcet)); 
}

这是scala.html文件中的参数定义

@( gestureList: List[GestureClassEntity])

这是下拉列表的代码:

<select class = "selectone">
  @for(gesture <- gestureList){
      <option value = @gesture.id>
        @gesture.getName()
      </option>
  } 
  </select>

运行 scala.html 文件时出现空点异常。

这是堆栈跟踪:

[error] application -

! @6bjof8n9g - Internal server error, for request [GET /train] ->

play.core.ActionInvoker$$anonfun$receive$1$$anon$1: Execution exception [[NullPo
interException: null]]
        at play.core.ActionInvoker$$anonfun$receive$1.apply(Invoker.scala:134) [
play_2.9.1.jar:2.0.2]
        at play.core.ActionInvoker$$anonfun$receive$1.apply(Invoker.scala:115) [
play_2.9.1.jar:2.0.2]
        at akka.actor.Actor$class.apply(Actor.scala:318) [akka-actor.jar:2.0.2]
        at play.core.ActionInvoker.apply(Invoker.scala:113) [play_2.9.1.jar:2.0.
2]
        at akka.actor.ActorCell.invoke(ActorCell.scala:626) [akka-actor.jar:2.0.
2]
        at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:197) [akka-actor.j
ar:2.0.2]
Caused by: java.lang.NullPointerException: null
        at scala.collection.JavaConversions$JListWrapper.iterator(JavaConversion
s.scala:618) ~[scala-library.jar:0.11.3]
        at scala.collection.IterableLike$class.foreach(IterableLike.scala:73) ~[
scala-library.jar:0.11.3]
        at scala.collection.JavaConversions$JListWrapper.foreach(JavaConversions
.scala:615) ~[scala-library.jar:0.11.3]
        at scala.collection.TraversableLike$class.map(TraversableLike.scala:194)
 ~[scala-library.jar:0.11.3]
        at scala.collection.JavaConversions$JListWrapper.map(JavaConversions.sca
la:615) ~[scala-library.jar:0.11.3]
        at views.html.train$.apply(train.template.scala:50) ~[classes/:na]

谁能帮我解决这个问题,因为我必须将项目作为作业提交,而且我迟到了。

谢谢大家。

【问题讨论】:

  • 看起来您的列表中有一个空的GestureClassEntity
  • 看起来像那样,但是当我使用 system.out.println 时,我能够迭代和打印对象。这样的想法可能是路由文件中缺少某些内容或在 scala.html.file 模板中定义参数时
  • 或者这似乎是您的模板中为空的列表。
  • 如您所建议的,模板中的列表很可能为空,但我如何检查该列表是否为空。因为这意味着问题可能出在模板列表或路由文件 GET 方法上。我在这里很困惑。
  • 您是否尝试在浏览器中加载http://localhost:9000/name URL?因为,当您点击/train 时会出现错误,但您没有在路由文件中显示/train URL 的映射。

标签: java playframework playframework-2.0 ebean


【解决方案1】:

问题来自/train Url 的调用,因为它映射到train() 方法,该方法使用GestureClassEntity 列表调用模板,该列表为空:

GET    /train                       controllers.Application.train()

然后它调用:

public static Result train()
  {   
      return ok(train.render(null)); // <- here is the problem
  }

【讨论】:

  • 所以你说的是 train 方法应该返回 gcet 对象而不是 null 对象。
  • 刚刚试过你的建议,它奏效了。感谢一千次​​pan>
猜你喜欢
  • 2016-03-14
  • 1970-01-01
  • 2012-12-11
  • 2015-05-10
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 2018-02-23
  • 1970-01-01
相关资源
最近更新 更多