0

アプリケーションでチェックボックスの選択に問題があります。1 つのページ (index.xhtml) に dataTable があります。同じページに ajax ボタンがあり、ユーザーがそれをクリックすると、アプリケーションは別のページ (detail.xhtml) に移動する必要があります。詳細ページには、index.xhtml に戻るための戻るボタンが含まれています。ナビゲーションは機能しますが、ユーザーが詳細ページから戻ると、ユーザーがクリックしても dataTable の行チェックボックスがチェックされません (すべての行を選択するヘッダー チェックボックスが機能します)。シナリオを繰り返すと(別名、詳細ページにアクセスして戻る)、チェックボックスが再び機能します。3回目の繰り返しの後、それらは再び機能しません(したがって、2回目のナビゲーションごとに機能しません)。ボタンで ajax="false" または faces-redirect=true を使用すると、すべてが機能します。

Mojarra 2.10.19、PF 3.5、Glassfish 3.2.1 の使用

簡単にするために、簡単な例で問題を再作成します。

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>

詳細.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();
    }
}

車.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

<navigation-rule>
    <from-view-id>/index.xhtml</from-view-id>
    <navigation-case>
        <from-outcome>add</from-outcome>
        <to-view-id>/detail.xhtml</to-view-id>
    </navigation-case>       
</navigation-rule>   

<navigation-rule>
    <from-view-id>/detail.xhtml</from-view-id>
    <navigation-case>
        <from-outcome>return</from-outcome>
        <to-view-id>/index.xhtml</to-view-id>
    </navigation-case>       
</navigation-rule> 
4

1 に答える 1

1

次のことを試すには、faces-config.xml からnavigation-ruleを削除する必要があります...

index.xhtml

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

詳細.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";
}
于 2013-03-31T07:14:50.663 に答える