为什么我不能在Play 2中将对象渲染到我的视图中?

时间:2012-10-02 15:32:39

标签: java templates playframework-2.0

我认为我误解了Play 2框架。

在我的应用程序控制器中,我从数据库中获取了一个Company对象 在我看来,我想对它进行一些操作。

companyView.scala.html:

@(company: Company)

@main("Welcome to Play 2.0") { 
 <h1>@{company.name}</h1>

}

应用程序控制器:

package controllers;

import models.Company;
import play.*;
import play.mvc.*;

import views.html.*;

public class Application extends Controller {

    public static Result company(String rest) {             
        Company company = 
                Company.find.where().ilike("restfulIdentifier.identifier", rest).findUnique();
        return ok(companyView.render(company));
    }   
}

但是return ok(companyView.render(company));会导致编译错误,因为companyView.render想要一个字符串。

如果我查看表单示例应用程序:

/**
     * Handle the form submission.
     */
    public static Result submit() {
        Form<Contact> filledForm = contactForm.bindFromRequest();

        if(filledForm.hasErrors()) {
            return badRequest(form.render(filledForm));
        } else {
            Contact created = filledForm.get();
            return ok(summary.render(created));
        }
    }

渲染对象没有问题。我想这个解决方案非常简单 我错过了文档的一些关键部分。请向我解释一下!

2 个答案:

答案 0 :(得分:1)

我在这种情况下的步骤如下:

  1. 更改scala模板,我们必须告诉scala模板我们的Company属于模型类:(但也按照Jordan的建议更改为@company.name

     @(company: models.Company)
    
     @main("Welcome to Play 2.0") { 
       <h1>@company.name</h1>
    
     }
    
  2. 运行命令play clean

  3. 然后运行play debug ~run
  4. 通过执行play debug ~run,您将触发在您的某个项目文件的每个SAVE上编译播放应用程序。

    注意: Play模板基本上是功能。需要编译这些函数,并且在使用之前需要声明这些函数中使用的所有函数。就像在常规Java开发中一样。

    您的render对象需要字符串这一事实可能是以下结果:

    • @(公司:公司)无法解析为model公司。
    • 最后一次编译有一个@(company:String)
    祝你好运!

答案 1 :(得分:0)

我不知道这是否能解决您的问题,但值得一试。尝试删除更改:

@ {company.name}

为:

@ company.name