帮助不能在play框架控制器中调用非静态方法模型?

时间:2011-05-29 03:20:23

标签: model controller playframework non-static

我一直关注播放框架1.1.1 YABE添加评论教程然后结束这个问题。

问题是出现此错误消息

编译错误

无法编译文件/app/controllers/Application.java。引发的错误是:无法对类型为Permainan的非静态方法addComment(String,String,boolean,String)进行静态引用

这是我的Application.java控制器内容

package controllers;

import play.*; 
import play.mvc.*;
import play.libs.*;
import java.util.*; 
import models.*;

public class Application extends Controller { 

  public static void permainanKomentar(Long permainanId, String author, String email, boolean showEmail, String content) {
    Permainan permainan = Permainan.findById(permainanId);
    Permainan.addComment(author, email, showEmail, content); >> (this line) 
    show(permainanId);
  }
}

和Permainan.java模型

package models;

import java.util.*;
import javax.persistence.*;
import play.data.binding.*;
import play.db.jpa.*;
import play.data.validation.*;

@Entity
public class Permainan extends Model {

  @Required
  public String nama;

  @Required
  @MaxSize(5000)
  @Lob
  public String deskripsi;

  @MaxSize(2000)
  @Lob
  public String material;

  @MaxSize(4000)
  @Lob
  public String syair;

  public Date postedAt;

  @OneToMany(mappedBy="permainan", cascade=CascadeType.ALL)
  public List<Komentar> komentar;

  @ManyToMany(cascade=CascadeType.PERSIST)
  public Set<Tag> tags;

  public Permainan(String nama, String deskripsi, String material, String syair) {

    this.komentar = new ArrayList<Komentar>();
    this.tags = new TreeSet<Tag>();
    this.nama = nama;
    this.deskripsi = deskripsi;
    this.material = material;
    this.syair = syair;
    this.postedAt = new Date();
  }

  public Permainan addComment(String author, String email, boolean showEmail, String content) {
    Komentar newKomentar = new Komentar(this, author, email, showEmail, content).save();
    this.komentar.add(newKomentar);
    this.save();
    return this;
  }
}

1 个答案:

答案 0 :(得分:1)

Java是一种区分大小写的语言,这意味着您必须小心使用的单词。在您的示例中:

  

Permainan permainan = Permainan.findById(permainanId);

在这里,您定义了一个名为Permainan的类的实例,它被称为permainan(请注意,对于类和具有sligh差异的实例,您使用相同的实例)。

  

Permainan.addComment(作者,电子邮件,showEmail,内容);

这里你使用的是Permainan类而不是实例;并且没有为您的对象调用addComment的静态方法。

所以我认为你应该使用:

  

permainan.addComment(作者,电子邮件,showEmail,内容);