gpt4 book ai didi

java - Primefaces:ajax 导航和 dataTable 复选框选择

转载 作者:行者123 更新时间:2023-12-01 14:43:41 24 4
gpt4 key购买 nike

我在应用程序中遇到了复选框选择问题。我在一页上有一个数据表(index.xhtml)。在同一页面上有一个 ajax 按钮,当用户单击它时,应用程序应该导航到另一个页面(detail.xhtml)。详细信息页面包含用于导航回index.xhtml 的返回按钮。导航有效,但当用户从详细信息页面返回时,当用户单击数据表中的行复选框时,不会选中它(选择所有行的标题复选框有效)。当我重复场景(又名访问详细信息页面并返回)时,复选框再次起作用。第三次重复后,它们不再工作(因此每隔一次导航它们就不起作用)。当我在按钮上使用 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;
}
}

faces-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>

最佳答案

您可能需要从 faces-config.xml 中删除 navigation-rule 才能尝试以下操作...

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";
}

关于java - Primefaces:ajax 导航和 dataTable 复选框选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15684606/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com