Jsf 如何从datatable中删除元素
使用Primefaces的简单应用程序无法正常运行。 当我选择带有单选按钮的元素时,delete方法中的事件参数为null,因此无法从datatable中删除所选行 view.xhtml//这里是我遇到问题的地方 java//这是我的托管bean 简单地说,我想要实现的是:从datatable中正确地选择行,然后从datatable和数据库中删除它。选择被设置为{eventBean.selectedEvent},但是您将{eventBean.event}来回传递给delete方法。这个问题是双重的。首先,这是错误的属性。其次,你不需要来回传递。它已经在豆子里了 因此,这应该做到: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方法。这个问题是双重
<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();
}