当前位置: 首页 > 知识库问答 >
问题:

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

丌官嘉福
2023-03-14

我在应用程序中遇到复选框选择问题。我在一个页面上有一个dataTable(index.xhtml)。在同一个页面上有一个ajax按钮,当用户单击它时,应用程序应该导航到另一个页面(detail.xhtml)。详细信息页面包含用于导航回索引的返回按钮。xhtml。导航有效,但当用户从详细信息页面返回时,当用户单击dataTable时,dataTable中的行复选框不会被选中(选中所有行的标题复选框有效)。当我重复场景时(即访问详细信息页面并返回),复选框再次起作用。第三次重复后,它们不再工作(因此每秒钟导航它们都不工作)。当我在按钮上使用ajax=“false”或faces redirect=true时,一切都正常。

使用Mojarra 2.10.19、PF 3.5和Glassfish 3.2.1

为了简单起见,我通过简单的示例重新创建了问题:

指数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();
    }
}

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

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> 

共有1个答案

殷宇
2023-03-14

您需要从faces-config.xml中删除导航规则才能尝试以下操作...

指数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";
}
 类似资料:
  • 我在index.php中有以下javascript代码: 我通过ajax检索信息,并使用jQuery数据表从该信息创建一个表,在数据表中,我有一个复选框。

  • 我正在使用datatable创建一个可排序、可搜索、可分页的表,表中的行是load serverside,我在每一行中添加了一个复选框,在表头中添加了一个check all复选框,我编写了一个自定义jquery函数来检查复选框的所有行,下面是我的代码: 问题是我的自定义检查全部功能无法检查数据表插件中的行的第2页,有没有什么方法可以克服这个问题?? 下面是我的HTML代码:

  • 问题内容: 我最近在玩扩展列表视图。 我正在尝试获得一个具有复选框作为子视图元素之一的列表视图。 我在http://mylifewithandroid.blogspot.com/2010/02/expandable-lists-and-check- boxes.html 找到了本教程,它看起来很完美。但是,当我编译并开始使用它时,我意识到它的故障很大。选中一个组中的一个框可能导致另一个组中的一个随

  • 这会找到我想要的节点吗?如果没有,我如何获得节点并正确地更改属性? 谢谢。马格努斯

  • 我试图创建一个表单,该表单顶部有一个复选框,当用户选中该复选框时,它会选择其他特定的复选框,但不是所有复选框。我很难通过反复试验或搜索找到答案。我唯一能找到的就是“全选”选项。不是我想要的。 理想情况下,当用户选中“管理包”旁边的复选框时,我想要“Chrome外观组”和“远程启动” 下面是代码和我在这方面的基本尝试,但它不起作用。提前谢谢。 超文本标记语言: Javascript 我不知道这个Ja

  • 本文向大家介绍jQuery实现复选框的全选和反选,包括了jQuery实现复选框的全选和反选的使用技巧和注意事项,需要的朋友参考一下 话不多说,请看代码 以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持呐喊教程!