无法创建Java List

时间:2012-03-31 16:41:26

标签: java jsf jsf-2

我想使用this代码并创建JSF 2.0表。

这是Managed 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");
    }

}

你看到有什么错误吗?

3 个答案:

答案 0 :(得分: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类应具有longString类型的2个属性:

//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...
}

第二个选项不是一个好习惯,我建议你将Backing Bean(Managed Bean)类与模型类(在本例中为Item类)分开。

答案 1 :(得分:2)

从API的this version开始, Item 构造函数需要一个String参数,您不提供该参数。我认为你的IDE偶然进入了那个班级。

从问题中的链接中读取示例我认为您需要提供自己的Item类(并正确导入),这需要一个无参数构造函数和一个 long < / em>和 String

答案 2 :(得分:2)

不要只关注文章的代码示例。阅读文章的文字。该文本不仅仅用于装饰:)

  

Item类只是一个简单的模型对象,其代码应该足够简单。具有两个属性SerializableLong id的{​​{1}} Javabean,一个默认构造函数和一个填充两个属性的构造函数,一组适当的getter / setter,String value和{{1}覆盖。

你几乎可以通过像Eclipse这样的像IDE一样完全自动生成它。