Невозможно создать список Java - PullRequest
1 голос
/ 31 марта 2012

Я хочу использовать этот код и создать таблицу JSF 2.0.

Это код 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 ]

4 голосов
/ 31 марта 2012

Вы должны определить класс 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 должен иметь 2 атрибута типа long и 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...
}

Второй вариант не рекомендуется, я рекомендую вам отделить класс Backing Bean (Managed Bean) отклассы вашей модели (в данном случае класс Item).

2 голосов
/ 01 апреля 2012

Не сосредотачивайтесь только на примерах кода статьи.Читайте также текст статьи.Текст написан не только для оформления:)

Класс Item представляет собой простой объект модели, его код должен быть достаточно простым.A Serializable Javabean с двумя свойствами Long id и String value, конструктором по умолчанию и конструктором, заполняющим оба свойства, набор соответствующих методов получения / установки, equals() и hashCode() переопределения.

Вы можете почти полностью сгенерировать его полностью с немного приличной IDE, такой как Eclipse.

2 голосов
/ 31 марта 2012

Начиная с этой версии API, конструктору Item требуется параметр String, который вы не предоставляете. Я думаю, что ваша IDE попала в этот класс случайно.

Читая пример по ссылке в вопросе, я полагаю, вам нужно предоставить свой собственный класс Item (и импортировать его правильно), который будет нуждаться в конструкторе без аргументов и в конструкторе long и String .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...