2011-08-30 125 views
1

我蜿蜒穿过这个Yabe教程,并且一直在愉快地得到错误并自行解决它们....直到现在。Yabe上新的烦人的NPE(创建自定义编辑器)

http://localhost:9000/@documentation/guide9 

这是关于自定义编辑窗口中的一部分。这

无论出于何种原因,当我发布一个新的消息,通过

http://localhost:9000/admin/new 

我收到一个空指针周围的标签......

In /app/controllers/Admin.java (around line 48) 
44:    post.content = content; 
45:    post.tags.clear(); 
46:   } 
47:   //Set tags list 
48:   for(String tag : tags.split("\\s+")){ 
49:    if(tag.trim().length() > 0) { 
50:     post.tags.add(Tag.findOrCreateByName(tag)); 
51:    } 
52:   } 
53:   // Validate 
54:   validation.valid(post); 

我看着Admin.java和Tag.java,并将它们与线条样本和测试副本进行比较。唯一的区别是验证对aAdmin.java什么,我想象是后来写在路上的一些测试脚本的夹杂物..

任何想法?

这里是我的管理...

package controllers; 

import play.*; 
import play.mvc.*; 

import java.util.*; 

import models.*; 

@With(Secure.class) 
public class Admin extends Controller { 

@Before 
static void setConnectedUser() { 
    if(Security.isConnected()) { 
     User user = User.find("byEmail", Security.connected()).first(); 
     renderArgs.put("user", user.fullname); 
    } 
} 

public static void index() { 
    List<Post> posts = Post.find("author.email", Security.connected()).fetch(); 
    render(posts); 
} 

public static void form(Long id) { 
    if(id != null) { 
     Post post = Post.findById(id); 
     render(post); 
    } 
    render(); 
} 

public static void save(Long id, String title, String content, String tags) { 
    Post post; 
    if(id == null) { 
     // Create post 
     User author = User.find("byEmail", Security.connected()).first(); 
     post = new Post(author, title, content); 
    } else { 
     // Retrieve post 
     post = Post.findById(id); 
     post.title = title; 
     post.content = content; 
     post.tags.clear(); 
    } 
    //Set tags list 
    for(String tag : tags.split("\\s+")){ 
     if(tag.trim().length() > 0) { 
      post.tags.add(Tag.findOrCreateByName(tag)); 
     } 
    } 
    // Validate 
    validation.valid(post); 
    if(validation.hasErrors()) { 
     render("@form", post); 
    } 
    //Save 
    post.save(); 
    index(); 
} 
} 

这里是我的tag.java

package models; 

import java.util.*; 
import javax.persistence.*; 

import play.db.jpa.*; 
import play.data.validation.*; 

@Entity 
public class Tag extends Model implements Comparable<Tag> { 

@Required 
public String name; 

private Tag(String name) { 
    this.name = name; 
} 

public static Tag findOrCreateByName(String name) { 
    Tag tag = Tag.find("byName", name).first(); 
    if(tag == null) { 
     tag = new Tag(name); 
    } 
    return tag; 
} 

public static List<Map> getCloud() { 
    List<Map> result = Tag.find(
     "select new map(t.name as tag, count(p.id) as pound) from Post p join p.tags as t group by t.name" 
    ).fetch(); 
    return result; 
} 

public String toString() { 
    return name; 
} 

public int compareTo(Tag otherTag) { 
    return name.compareTo(otherTag.name); 
} 

} 
+1

您还没有表现出在那里,你企图分裂'tags'变量是从... –

回答

1

在调用你可能会丢失与名称输入“保存()方法的形式标签。喜欢的东西:

<input id="tags" name="tags" type="text" value="" /> 

在本教程中有一个模板:

<p> 
     #{field 'tags'} 
     <label>Enter some tags:</label> 
     <input type="text" size="50" 
      name="${field.name}" value="${post?.tags?.join(' ')}" /> 
     #{/field} 
    </p> 

检查你拥有了它。

+0

来我确实有它。它是form.html,它有一些语法错误。 NPE走了! – TangibleDream

相关问题