Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 如何从datatable中删除元素_Jsf_Jsf 2_Primefaces_Datatable - Fatal编程技术网

Jsf 如何从datatable中删除元素

Jsf 如何从datatable中删除元素,jsf,jsf-2,primefaces,datatable,Jsf,Jsf 2,Primefaces,Datatable,使用Primefaces的简单应用程序无法正常运行。 当我选择带有单选按钮的元素时,delete方法中的事件参数为null,因此无法从datatable中删除所选行 view.xhtml//这里是我遇到问题的地方 java//这是我的托管bean 简单地说,我想要实现的是:从datatable中正确地选择行,然后从datatable和数据库中删除它。选择被设置为{eventBean.selectedEvent},但是您将{eventBean.event}来回传递给delete方法。这个问题是双重

使用Primefaces的简单应用程序无法正常运行。 当我选择带有单选按钮的元素时,delete方法中的事件参数为null,因此无法从datatable中删除所选行

view.xhtml//这里是我遇到问题的地方

java//这是我的托管bean

简单地说,我想要实现的是:从datatable中正确地选择行,然后从datatable和数据库中删除它。

选择被设置为{eventBean.selectedEvent},但是您将{eventBean.event}来回传递给delete方法。这个问题是双重的。首先,这是错误的属性。其次,你不需要来回传递。它已经在豆子里了

因此,这应该做到:

<p:commandButton ... action="#{eventBean.delete}" />
另一件奇怪的事情是,在bean初始化期间,您没有初始化事件列表。这意味着当您提交表单时,在新请求期间,请求范围的bean是新构造和初始化的,事件列表将为null,因此在模型中没有可选择和设置的内容

在EventBean中应该有以下方法:

通过这种方式,您现在还可以在浏览器中直接打开view.xhtml时看到列表,而无需首先在另一个页面中提交任意表单。换句话说,现在终于到了


与具体问题无关,您混合了JSF和CDIBean管理注释。完全去掉@ManagedBean注释。您还在getter方法中执行延迟加载。去掉它们,在@PostConstruct中完成这项工作,并保持自动生成的getter和setter方法不变。通过这种方式,您还可以轻松地在问题中提供更多简短的代码片段,因为您省略了所有getter/setter,因为它们非常明显。

我尝试按照您的建议修改代码,但得到以下日志:警报:在EJB EventManager上调用时发生系统异常,方法:public void boundary.EventManager.deleteEvententity.Event警报:com.sun.proxy上的javax.ejb.EJBException[…]。$Proxy244.deleteEventUnknown Source at boundary.\uuuuuuuuuEJB31\u生成的\uuuuuuuuuuuuuuuuuuuEventManager\uuuuuuuuuu Intf\uuuuuuuuuuuuuuuuuuuuuuuuuuuu Bean原因:java.lang.IllegalArgumentException:Object:null不是已知的实体类型。[…]在代码中看不到您如何准备和保存事件列表。它基本上是一个空列表,我认为这是代码过于简化的结果。尝试在问题的原始文本中发布一条消息,除了entity Event.java之外,该项目的所有创建文件都存在。但是,变量列表eventlist仅用于显示datatable中的数据,而不用于删除事件,我将变量event selectedEvent分配给该事件。我想我现在的主要问题是selection={eventBean.selectedEvent}没有得到所选的事件;我认为@PostConstruct不是我的问题,因为我实际上可以看到存储数据的整个列表。但无论如何,我尝试了你的方法,但是如果我使用ViewScoped,当我创建并显示事件列表时,我会得到EJBException,而这正是过去工作的部分。
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.annotation.ManagedBean;
import javax.ejb.EJB;
import javax.inject.Named;
import javax.enterprise.context.RequestScoped;

@ManagedBean
@Named(value = "eventBean")
@RequestScoped
public class EventBean {

@EJB
private EventManager em;

private Event event;

private Event selectedEvent = new Event(); 

private Date currentDate;

private List<Event> eventlist = new ArrayList<Event>();


public Date getCurrentDate() {
    if (currentDate == null) {
        currentDate = new Date();
    }
    return currentDate;
}

public EventBean() {
}

public Event getEvent() {
    if (event == null) {
        event = new Event();
    }
    return event;
}

public void setEvent(Event event) {
    this.event = event;
}

public List<Event> getEventlist() {
    return eventlist;
}

public void setEventlist(List<Event> eventlist) {
    this.eventlist = eventlist;
}

public Event getSelectedEvent() {

    return selectedEvent;
}

public void setSelectedEvent(Event selectedEvent) {
    this.selectedEvent = selectedEvent;
}

public String create() {
    em.save(event);
    eventlist = em.findEvents();
    return "view";
}

public String delete(Event event){  //the event object is null
    em.deleteEvent(event);
    return "index";
}
}
<p:commandButton ... action="#{eventBean.delete}" />
public String delete() {
    em.deleteEvent(selectedEvent);
    return "index";
}
@PostConstruct
public void init() {
    eventlist = em.findEvents();
}