2012-03-31 174 views
1

我想使用this代码并创建JSF 2.0表。无法创建Java列表

这是托管bean的Java代码:

import java.io.Serializable; 
import javax.enterprise.context.SessionScoped; 
// or import javax.faces.bean.SessionScoped; 
import javax.inject.Named; 
/* include SQL Packages */ 
import java.sql.Connection; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.util.HashMap; 
import javax.annotation.PostConstruct; 
import javax.sql.DataSource; 
import javax.annotation.Resource; 
import javax.faces.context.FacesContext; 
import javax.inject.Inject; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpSession; 
// or import javax.faces.bean.ManagedBean; 
import java.io.Serializable; 
import java.util.ArrayList; 
import java.util.List; 

import javax.annotation.PostConstruct; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.ViewScoped; 
import javax.faces.model.DataModel; 
import javax.faces.model.ListDataModel; 

import org.glassfish.osgicdi.OSGiService; 

@Named("ApplicationController") 
@SessionScoped 
public class Application implements Serializable { 

    private List<Item> list; 
    private transient DataModel<Item> model; 
    private Item item = new Item(); 
    private boolean edit; 

    @PostConstruct 
    public void init() { 
     // list = dao.list(); 
     // Actually, you should retrieve the list from DAO. This is just for demo. 
     list = new ArrayList<Item>(); 
     list.add(new Item(1L, "item1")); 
     list.add(new Item(2L, "item2")); 
     list.add(new Item(3L, "item3")); 
    } 

    public void add() { 
     // dao.create(item); 
     // Actually, the DAO should already have set the ID from DB. This is just for demo. 
     item.setId(list.isEmpty() ? 1 : list.get(list.size() - 1).getId() + 1); 
     list.add(item); 
     item = new Item(); // Reset placeholder. 
    } 

    public void edit() { 
     item = model.getRowData(); 
     edit = true; 
    } 

    public void save() { 
     // dao.update(item); 
     item = new Item(); // Reset placeholder. 
     edit = false; 
    } 

    public void delete() { 
     // dao.delete(item); 
     list.remove(model.getRowData()); 
    } 

    public List<Item> getList() { 
     return list; 
    } 

    public DataModel<Item> getModel() { 
     if (model == null) { 
      model = new ListDataModel<Item>(list); 
     } 

     return model; 
    } 

    public Item getItem() { 
     return item; 
    } 

    public boolean isEdit() { 
     return edit; 
    } 

} 

我得到这个问题,当我输入的代码到NetBeans:

enter image description here enter image description here

如何能声明的Java清单为了工作?

最良好的祝愿

编辑我编辑的代码是这样的:

import java.io.Serializable; 
import javax.enterprise.context.SessionScoped; 
// or import javax.faces.bean.SessionScoped; 
import javax.inject.Named; 
/* include SQL Packages */ 
import java.sql.Connection; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.util.HashMap; 
import javax.annotation.PostConstruct; 
import javax.sql.DataSource; 
import javax.annotation.Resource; 
import javax.faces.context.FacesContext; 
import javax.inject.Inject; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpSession; 
// or import javax.faces.bean.ManagedBean; 
import java.io.Serializable; 
import java.util.ArrayList; 
import java.util.List; 

import javax.annotation.PostConstruct; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.ViewScoped; 
import javax.faces.model.DataModel; 
import javax.faces.model.ListDataModel; 

import org.glassfish.osgicdi.OSGiService; 

@Named("ApplicationController") 
@SessionScoped 
public class Application implements Serializable { 

    public Application() { 
    }  

    private List<Application> list; 
    private transient DataModel<Application> model; 
    private Application item = new Application(); 
    private boolean edit; 

    private Application(long l, String string) { 
     throw new UnsupportedOperationException("Not yet implemented"); 
    } 

    @PostConstruct 
    public void init() { 
     // list = dao.list(); 
     // Actually, you should retrieve the list from DAO. This is just for demo. 
     list = new ArrayList<Application>(); 
     list.add(new Application(1L, "item1")); 
     list.add(new Application(2L, "item2")); 
     list.add(new Application(3L, "item3")); 
    } 

    public void add() { 
     // dao.create(item); 
     // Actually, the DAO should already have set the ID from DB. This is just for demo. 
     item.setId(list.isEmpty() ? 1 : list.get(list.size() - 1).getId() + 1); 
     list.add(item); 
     item = new Application(); // Reset placeholder. 
    } 

    public void edit() { 
     item = model.getRowData(); 
     edit = true; 
    } 

    public void save() { 
     // dao.update(item); 
     item = new Application(); // Reset placeholder. 
     edit = false; 
    } 

    public void delete() { 
     // dao.delete(item); 
     list.remove(model.getRowData()); 
    } 

    public List<Application> getList() { 
     return list; 
    } 

    public DataModel<Application> getModel() { 
     if (model == null) { 
      model = new ListDataModel<Application>(list); 
     } 

     return model; 
    } 

    public Application getItem() { 
     return item; 
    } 

    public boolean isEdit() { 
     return edit; 
    } 

    private void setId(int i) { 
     throw new UnsupportedOperationException("Not yet implemented"); 
    } 

    private int getId() { 
     throw new UnsupportedOperationException("Not yet implemented"); 
    } 

} 

你看到的任何错误?

+1

嗨,你有没有为你的Item-class声明正确的构造函数? – 2012-03-31 16:43:13

+0

我已根据问题更新 – 2012-03-31 19:04:27

回答

2

请不要只关注文章的代码示例。阅读文章的文字。该文本是不是用来装饰的只写:)

Item类只是一个简单的模型对象,它的代码应该直截了当不够。 A Serializable Javabean具有两个属性Long idString value,默认构造函数和构造函数填充了两个属性,一组适当的getter/setters,equals()hashCode()重写。

你几乎可以自动生成一个完整的像Eclipse这样的不错的IDE。

4

您必须定义Item类。

更新:

保持第一种形式的代码。你应该有一个Item类。

public class Item { 
    private long id; 
    private String name; 
    public Item() {} 
    public Item(long id, String name) { 
     this.id = id; 
     this.name = name; 
    } 
    //getters and setters for the attributes... 
} 

现在,在您更新的代码中,您使用的是Application对象的列表。所以,你的Application类应该有long 2个属性和String类型:

//annotations here... 
public class Application implements Serializable { 
    private long id; 
    private String name; 
    //getters and setters for these attributes... 

    public Application() { 
     //keep your actual code here 
    } 

    //we have to add a constructor that receives a long and a String 
    //to initialize the attributes values. 
    public Application(long id, String name) { 
     this.id = id; 
     this.name = name; 
    } 

    //your actual code... 
} 

第二个选项是不是一个好的做法,我建议你支持Bean(托管Bean)的类从您的模型类分开(在这种情况下, Item类)。

+0

更新了我的答案我这样编辑了代码:http://pastebin.com/YyMmv0nY这段代码是否正确? – 2012-03-31 17:51:40

2

this version的API中,项目构造函数需要一个String参数,您不提供。我认为你的IDE不小心吸入了这门课。

阅读从我相信你需要提供自己的Item类(和导入正确的话),这将需要一个无参数的构造函数和一个需要字符串的问题链接的例子