Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 Primefaces数据表动态选择不工作_Jsf 2_Primefaces_Datatable - Fatal编程技术网

Jsf 2 Primefaces数据表动态选择不工作

Jsf 2 Primefaces数据表动态选择不工作,jsf-2,primefaces,datatable,Jsf 2,Primefaces,Datatable,在我的应用程序中,我需要为datatable(我使用的是primefaces 5.0)动态地决定选择模式“single”或“multiple”,这取决于指定的选择。下面是我绑定的el表达式 XHTML: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:cc="http://java.sun.com

在我的应用程序中,我需要为datatable(我使用的是primefaces 5.0)动态地决定选择模式“single”或“multiple”,这取决于指定的选择。下面是我绑定的el表达式

XHTML:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:cc="http://java.sun.com/jsf/composite"
      xmlns:h="http://java.sun.com/jsf/html" 
      xmlns:p="http://primefaces.org/ui"
      xmlns:ui="http://java.sun.com/jsf/facelets"      
      >
    <h:head>

        <title>Primefaces Data Table</title>

        <script type="text/javascript" src="Test.js"/>

    </h:head>

    <h:body>
        <h:form id="form">

        <p:growl id="msgs" showDetail="true" />

        <p:dataTable id="T" var="car" widgetVar="T_wv" value="#{ECTestScreen.cars}" selectionMode="#{ECTestScreen.selectionMode}" selection="#{ECTestScreen.selectionMode ne 'multiple'? ECTestScreen.selectedCar :ECTestScreen.selectedCars}" rowKey="#{car.id}" paginator="true" rows="5" paginatorAlwaysVisible="true">

            <f:facet name="header">
                Row Selection on Click
            </f:facet>
            <p:column headerText="Car Id">
                <h:outputText value="#{car.id}" />
            </p:column>
            <p:column headerText="Year">
                <h:outputText value="#{car.year}" />
            </p:column>
            <p:column headerText="Brand">
                <p:inputTextarea id="ta" rows="10" cols="30" style="height: 22px; overflow:auto;" value="#{car.brand}" />
            </p:column>
            <p:column headerText="Color">
               <h:inputText value="#{car.color}" onmouseup="onCellFocus1(event, $(this).parent(), [{name: 'screenletId', value: 'T'}, {name: 'rowIndex', value: '5'}, {name: 'colName', value: 'Color'}]);"/>
            </p:column> 

           <p:ajax event="rowSelect" listener="#{ECTestScreen.onRowSelect}" update=":form:msgs" />

        </p:dataTable>

         <p:commandButton value="Update Table" actionListener="#{ECTestScreen.onButtonClick}"/>

        </h:form>
    </h:body>
</html>
XHTML:
Primefaces数据表
单击即可选择行
Java代码:

@ManagedBean(name = "ECTestScreen")
@ViewScoped
public class ECTestScreen implements Serializable {
    private static final long serialVersionUID = -855625904411046273L;

    private List<String> products = new ArrayList<>();
    private List<Integer> rowList = new ArrayList<>();
    private List<Car> cars = new ArrayList<>();
    private Car selectedCar ;
    private List<Car> selectedCars = new ArrayList<>();
    private String selectionMode="multiple";

    public List<Integer> getRowList() {
        return rowList;
    }

    public void setRowList(List<Integer> rowList) {
        this.rowList = rowList;
    }

    public List<String> getProducts() {     
        return products;
    }

    public void setProducts(List<String> products) {
        this.products = products;
    }

    public List<Car> getCars() {
        for(int j=1; j<10;j++){
            this.cars.add(new Car(j, (2000+j), "Merc-"+j, "Black-"+j));
        }
        return cars;
    }

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

    public Car getSelectedCar() {       
        return selectedCar;
    }

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

    public List<Car> getSelectedCars() {
        FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add("form");
        return selectedCars;
    }

    public void setSelectedCars(List<Car> selectedCars) {
        this.selectedCars = selectedCars;
    }

    public String onButtonClick(){
        for(int i=1; i<6; i++){
            rowList.add(i);

        }

        for(int j=1; j<4;j++){
            products.add("td="+j);
        }

        for(int j=1; j<10;j++){
            cars.add(new Car(j, (2000+j), "Merc-"+j, "Black-"+j));
        }

        FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add("form");
        return "";
    }

    public String getSelectionMode(){
        return selectionMode;
    }

    public void setSelectionMode(String selectionMode){
                 selectionMode="multiple";

    }
    public void onRowSelect(SelectEvent event) {
        FacesMessage msg = new FacesMessage("Car Selected: ", ((Car) event.getObject()).getBrand());
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }

    public void onRowUnselect(UnselectEvent event) {
        FacesMessage msg = new FacesMessage("Car Unselected: ", ((Car) event.getObject()).getBrand());
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }
@ManagedBean(name=“ECTestScreen”)
@视域
公共类ECTestScreen实现了可序列化{
私有静态最终长serialVersionUID=-855625904411046273L;
私有列表产品=新的ArrayList();
private List rowList=new ArrayList();
私家车列表=新的ArrayList();
私家车选择私家车;
private List selectedCars=new ArrayList();
私有字符串selectionMode=“多个”;
公共列表getRowList(){
返回行列表;
}
公共无效集合行列表(列表行列表){
this.rowList=行列表;
}
公共列表getProducts(){
退货产品;
}
公共产品(列出产品){
这一点。产品=产品;
}
公共列表getCars(){

对于(int j=1;j,我真的不知道为什么要这样区分,因为多重选择数据表也应该包含单一选择的要求


但是如果你坚持的话,我可能会制作两个数据表——一个单一选择和一个多重选择,并让它们“呈现”基于布尔值。

selectedCars
必须是一个数组,而不是一个
列表。

showcase提供了一个列表示例,但它不是这样工作的。

这是我共享的独立示例。实际的应用程序在运行时决定选择,而且我们只使用了一个datatable.xhtml,它将用于数百个应用程序creens。它将决定的运行时间取决于某些屏幕xml配置。我需要使其仅在一个datatable动态切换选择时工作。我已观察到rowkey存在问题。但如果我们正在检查动态选择,则不确定如何指定它。