2013-03-28 4 views
0

내 애플리케이션에서 확인란 선택 문제가 발생했습니다. 한 페이지 (index.xhtml)에 dataTable이 있습니다. 같은 페이지에는 아약스 버튼이 있으며 사용자가 그것을 클릭하면 애플리케이션은 다른 페이지 (detail.xhtml)로 이동해야합니다. 세부 정보 페이지에는 index.xhtml로 되돌아 가기위한 돌아 가기 버튼이 있습니다. 탐색이 작동하지만 사용자가 세부 정보 페이지에서 돌아 오면 dataTable의 행 확인란이 사용자가 클릭 할 때 선택되지 않습니다 (모든 행을 선택하는 헤더 확인란이 작동 함). 시나리오 (일명 세부 정보 페이지 방문 및 돌아 가기)를 반복하면 확인란이 다시 작동합니다. 세 번째 반복 후에, 그들은 다시 작동하지 않습니다. 그래서 매 두 번째 탐색은 작동하지 않습니다. 버튼에 ajax = "false"또는 faces-redirect = true를 사용하면 모든 것이 작동합니다. 간략 함을 위해 인 Mojarra 2.10.19, PF 3.5 글래스 피시 3.2.1Primefaces : Ajax 탐색 및 데이터 테이블 체크 박스 선택

사용

I 다시 만드는 간단한 예에 의한 문제점 :

index.xhtml :

<html xmlns="http://www.w3.org/1999/xhtml"  
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:p="http://primefaces.org/ui" > 

<h:head></h:head> 
<h:body> 
    <h:form> 
     <p:commandButton value="Add" action="add" /> 
     <p:dataTable id="cars" var="car" value="#{tableBean.mediumCarsModel}" 
        selection="#{tableBean.selectedItems}" > 

      <p:column selectionMode="multiple" style="width: 2%" /> 

      <p:column headerText="Model"> 
       #{car.model} 
      </p:column> 

     </p:dataTable> 
    </h:form>  
</h:body> 

detail.xhtml :

<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:p="http://primefaces.org/ui" > 

<h:head></h:head> 

<h:body> 
    <h:form> 
     <p:commandButton value="Return" action="return" /> 
    </h:form>  
</h:body> 
,

TableBean.java

@ManagedBean 
@SessionScoped 
public class TableBean {  
    private final static String[] manufacturers; 

    static { 
     manufacturers = new String[10]; 
     manufacturers[0] = "Mercedes"; 
     manufacturers[1] = "BMW"; 
     manufacturers[2] = "Volvo"; 
     manufacturers[3] = "Audi"; 
     manufacturers[4] = "Renault"; 
     manufacturers[5] = "Opel"; 
     manufacturers[6] = "Volkswagen"; 
     manufacturers[7] = "Chrysler"; 
     manufacturers[8] = "Ferrari"; 
     manufacturers[9] = "Ford"; 
    } 

    private List<Car> carsSmall;  
    private CarDataModel mediumCarsModel; 
    private List<Car> selectedItems; 

    public TableBean() { 
     carsSmall = new ArrayList<Car>(); 
     populateRandomCars(carsSmall, 5); 
     mediumCarsModel = new CarDataModel(carsSmall); 
    } 

    private void populateRandomCars(List<Car> list, int size) { 
     for (int i = 0; i < size; i++) { 
      list.add(new Car(manufacturers[i])); 
     } 
    } 

    public List<Car> getSelectedItems() { 
     return selectedItems; 
    } 

    public void setSelectedItems(List<Car> selectedItems) {   
     this.selectedItems = selectedItems; 
    } 

    public CarDataModel getMediumCarsModel() {   
     return mediumCarsModel; 
    } 
} 

CarDataModel.java

public class CarDataModel extends ListDataModel<Car> implements SelectableDataModel<Car> { 

    public CarDataModel(List<Car> data) { 
     super(data); 
    } 

    @Override 
    public Car getRowData(String rowKey) { 
     List<Car> cars = (List<Car>) getWrappedData(); 

     for(Car car : cars) { 
      if(car.getModel().equals(rowKey)){     
       return car; 
      } 
     } 
     return null; 
    } 

    @Override 
    public Object getRowKey(Car car) { 
     return car.getModel(); 
    } 
} 

Car.java

public class Car implements Serializable { 

    private String model; 

    public String getModel() { 
     return model; 
    } 

    public void setModel(String model) { 
     this.model = model; 
    } 

    public Car(String model) { 
     this.model = model; 
    } 
} 

면-config.xml에

,281,732

답변

1

(10) 당신은 다음과 같은 시도 얼굴-config.xml 파일에서 탐색 규칙을 제거하는 많은 필요 ...

index.xhtml

<p:commandButton value="Add" action="#{tableBean.redirectToDetail}" /> 

detail.xhtml

<p:commandButton value="Return" action="#{tableBean.redirectToIndex}" /> 

TableBean.java

@ManagedBean(name = "tableBean") 
... 
... 
... 
public String redirectToDetail() { 
    return "detail?faces-redirect=true"; 
} 
public String redirectToIndex() { 
    return "index?faces-redirect=true"; 
} 
+0

내 게시물에 내 상태로, 얼굴 - 리디렉션 작동하지만, 사용하고 싶지 않아요. – user2219927