2015-12-21 3 views
0

Я основывая свой пример на PrimeFaces витрине пример для p:dataTable ContextMenu exampleр: DataTable Выбранная строка всегда нуль

Разница в том, что я пытаюсь удалить через p:confirmDialog, но выбранный элемент всегда нуль.

Вот вырубать пример

XHTML

<!DOCTYPE html> 
<html xmlns="http://www.w3c.org/1999/xhtml" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://xmlns.jcp.org/jsf/html" 
    xmlns:p="http://primefaces.org/ui" 
    xmlns:ui="http://java.sun.com/jsf/facelets"> 
<h:head> 
    <title>Example</title>s 
</h:head> 
<h:body> 
    <h:form> 
     <p:confirmDialog widgetVar="cd" severity="alert" header="Confirmation" 
      message="Are you sure you wish to delete this car?"> 
      <p:commandButton value="Yes" action="#{carTableView.deleteCar}" 
       update=":dataForm" oncomplete="PF('cd').hide();" /> 
      <p:commandButton value="No" onclick="PF('cd').hide();" type="button" /> 
     </p:confirmDialog> 
    </h:form> 
    <h:form id="dataForm"> 
     <p:contextMenu for="cars"> 
      <p:menuitem value="Delete" icon="ui-icon-close" 
       onclick="PF('cd').show(); return false;" /> 
      <!-- action="#{formsView.deleteForm}" update=":dataForm" /> --> 
     </p:contextMenu> 
     <p:dataTable id="cars" var="car" value="#{carTableView.cars}" 
      rowKey="#{car.id}" selection="#{carTableView.selectedCar}" 
      selectionMode="single"> 
      <f:facet name="header"> 
          RightClick to View Options 
         </f:facet> 
      <p:column headerText="Id"> 
       <h:outputText value="#{car.id}" /> 
      </p:column> 
      <p:column headerText="Name"> 
       <h:outputText value="#{car.name}" /> 
      </p:column> 
     </p:dataTable> 
    </h:form> 
</h:body> 
</html> 

Модель

public class Car 
{ 

    private String id; 

    private String name; 

    public Car(String id, String name) 
    { 
     this.id = id; 
     this.name = name; 
    } 

    public String getId() 
    { 
     return id; 
    } 

    public void setId(String id) 
    { 
     this.id = id; 
    } 

    public String getName() 
    { 
     return name; 
    } 

    public void setName(String name) 
    { 
     this.name = name; 
    } 

} 

И боб

import java.io.Serializable; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.UUID; 

import javax.annotation.PostConstruct; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.ViewScoped; 

@SuppressWarnings("serial") 
@ManagedBean 
@ViewScoped 
public class CarTableView implements Serializable 
{ 

    private List<Car> cars; 

    private Car selectedCar; 

    @PostConstruct 
    public void init() 
    { 
     cars = createCars(); 
    } 

    private List<Car> createCars() 
    { 
     List<Car> list = new ArrayList<Car>(); 
     for (int i = 0; i < 10; i++) 
     { 
      list.add(new Car(UUID.randomUUID().toString().substring(0, 8), "Car " + String.valueOf(i + 1))); 
     } 

     return list; 
    } 

    public void deleteCar() 
    { 
     cars.remove(selectedCar); 
     selectedCar = null; 
    } 

    public List<Car> getCars() 
    { 
     return cars; 
    } 

    public void setCars(List<Car> cars) 
    { 
     this.cars = cars; 
    } 

    public Car getSelectedCar() 
    { 
     return selectedCar; 
    } 

    public void setSelectedCar(Car selectedCar) 
    { 
     this.selectedCar = selectedCar; 
    } 

} 

Теперь мне кажется, что это участие о f работает с deleteCar действием от p:confirmDialog, что является проблемой.

Я говорю это, как если бы я изменить

<p:menuitem value="Delete" icon="ui-icon-close" 
     onclick="PF('cd').show(); return false;" /> 

Для

<p:menuitem value="Delete" icon="ui-icon-close" 
     action="#{formsView.deleteForm}" update=":dataForm" /> 

Затем он работает. В примере p:confirmDialog метод selectedCar в методе deleteCar всегда равен нулю. Несмотря на указания атрибута rowKey в p:dataTable

ответ

0

Ответ: p:confirmDialog должен быть частью одного и того же h:form как p:dataTable

1

Поскольку у вас есть две формы, заключите <h:setPropertyActionListener > к вашему <p:menuitem>

Смежные вопросы