Templates 玩从控制器调用render()操作的框架

Templates 玩从控制器调用render()操作的框架,templates,playframework,Templates,Playframework,我一直在自定义CRUD模块生成的模板,现在需要重写save方法来保存模板中的自定义数据。我可以保存所有数据,但调用渲染操作时: render("Users/show.html", user); 我得到模板对象的nullPointerException: 我确实在传递正确的用户对象,因为当我运行此命令时: System.out.println(user.toString()); //render("Users/show.html", user); 它将我的用户写入控制台 任何帮助都将不胜感激

我一直在自定义CRUD模块生成的模板,现在需要重写save方法来保存模板中的自定义数据。我可以保存所有数据,但调用渲染操作时:

render("Users/show.html", user);
我得到模板对象的nullPointerException:

我确实在传递正确的用户对象,因为当我运行此命令时:

System.out.println(user.toString());
//render("Users/show.html", user);
它将我的用户写入控制台

任何帮助都将不胜感激


玩!1.2.3您的控制器正在渲染

render("Users/show.html", user);
但模板中元素的名称是object。它应该是用户

评论更新

CRUd上的原始模板使用“对象”作为CRUd下实体的抽象。如果您检查控制器的源代码,它会显示:

//ignoring case when template is not found, alternative also uses object
render(type, object); 
这意味着有两种选择:

  • 您修改了模板,破坏了此兼容性。在您的场景中似乎不是这样,尽管我们无法看到完整的代码(因此它可能仍然是一个选项)
  • 您修改了控制器,更改了发送到模板的对象。这似乎是你的情况。因此,要么修复模板以使用用户,要么将用户重命名为对象

  • 是否在带有@After注释的方法中传递用户对象?在renderArgs中以另一种方法传递用户对象也可能会覆盖传递给模板的值。您可以共享控制器代码吗?我正在覆盖CRUD模块生成的模板,我认为它使用对象作为通用名称。我试着按照你的建议将其更改为用户,但对我收到的错误没有任何影响。谢谢!第二种选择解决了这个问题,但似乎导致了另一个问题。它似乎不再保存我试图添加的职责,在表单中的所有信息都将被保存之前,当我试图调用渲染函数时,模板将崩溃。现在它似乎没有保存所有的数据,并且正在呈现页面,但我想我应该在一个新的问题中问这个问题。非常感谢。