Method not found: onSelect(org.primefaces.event.SelectEvent)

UI Components for JSF
NOTiFY
Posts: 393
Joined: 25 May 2016, 22:57

14 May 2019, 14:40

I've added a 'selectionMode' & "selection' to my dataTable:

Code: Select all

 <p:dataTable value="#{motorcycleController.allMotorcycles}" style="width:100%" var="motorcycle" border="1"
                         selectionMode="single"
                         selection="#{motorcycleController.selectedMotorcycle}"
                         rowKey="#{motorcycle}"
                         id="dataTableMotorcycles"
I have a setter & getter in my backing bean:

Code: Select all

 public Motorcycle getSelectedMotorcycle() {
        LOGGER.info("***** 1 getSelectedMotorcycle selectedMotorcycle = {}", selectedMotorcycle);
        return selectedMotorcycle;
    }

    public void setSelectedMotorcycle(Motorcycle selectedMotorcycle) {
        LOGGER.info("***** 2 setSelectedMotorcycle selectedMotorcycle = {}", selectedMotorcycle);
        this.selectedMotorcycle = selectedMotorcycle;
    }
I have added a rowSelect Ajax listener to my dataTable:

Code: Select all

 <p:ajax event="rowSelect" process="@this" listener="#{motorcycleController.onMotorcycleSelect}" />
When I select a row the setter & getter is accessed:
13:31:23,740 INFO [com.gostophandle.controller.MotorcycleController] (default task-1) ***** 1 getSelectedMotorcycle selectedMotorcycle = null

13:31:37,123 INFO [com.gostophandle.controller.MotorcycleController] (default task-6) ***** 2 setSelectedMotorcycle selectedMotorcycle = Motorcycle{id='5c8683543b0773a8d764b7bd', category='', manufacturer='Moto Guzzi', model='V7 III Stone', dateProductionStarted=2019-01-01 00:00:00.0, dateProductionEnded=null, modelYear=2019-01-01 00:00:00.0, colours=[Colour{colour='Camouflage'}, Colour{colour='Yellow'}, Colour{colour='Blue'}, Colour{colour='Black'}], engine=Engine{type='Four Stroke', displacement=749.0, capacityUnit='cc', bore=80.0, boreMeasurement='mm', stroke=74.0, strokeMeasurement='mm', distribution='null', maxiumPowerHp=85.0, maxiumPowerKilowatt=38.0, maxiumPowerRpm=6200.0, maximumTorque=60.0, maximumTorqueUnit='Nm', maximumTorqueRpm=4900.0}, performance=Performance{topSpeedMph=130.0, topSpeedKph=208.0, accelleration30Mph=0.0, accelleration60Mph=0.0, accelleration100Mph=0.0, accelleration30Kph=0.0, accelleration60Kph=0.0, accelleration100Kph=0.0}, chassis=null, dimensions=null, weights=null, transmission=null, instruments=null, electrics=null, accessories=[Accessory{productNumber='MG001', productName='Product 1'}, Accessory{productNumber='MG002', productName='Product 2'}, Accessory{productNumber='MG003', productName='Product 3'}, Accessory{productNumber='MG004', productName='Product 4'}]}
However the 'ajax' listener, in the backing bean:

Code: Select all

 public void onMotorcycleSelect(SelectEvent selectEvent) {
        LOGGER.info("***** 3 onMotorcycleSelect selectEvent = {}", selectEvent);
        LOGGER.info("***** 4 onMotorcycleSelect selectedMotorcycle = {}", this.selectedMotorcycle);
 }
throws an exception:
13:31:37,127 WARNING [javax.enterprise.resource.webcontainer.jsf.lifecycle] (default task-6) /SelectMotorcycles.xhtml @82,115 listener="#{motorcycleController.onMotorcycleSelect}": Method not found: class com.gostophandle.controller.MotorcycleController.onMotorcycleSelect(org.primefaces.event.SelectEvent): javax.el.MethodNotFoundException: /SelectMotorcycles.xhtml @82,115 listener="#{motorcycleController.onMotorcycleSelect}": Method not found: class com.gostophandle.controller.MotorcycleController.onMotorcycleSelect(org.primefaces.event.SelectEvent)
I've looked at the PF Demo and Google'd StackOverflow etc. and can't see my error?
Last edited by NOTiFY on 14 May 2019, 15:04, edited 1 time in total.
PF 13.0.0--Jakarta. Jakarta Faces 4.0.1/Kotlin Multiplatform 1.9.10
Mojarra 4.0.2, OmniFaces 4.2
WildFly 29.0.1.Final 'preview' Jakarta EE 10.0.0
JDK 20.0.2, Kotlin 1.9.10, Gradle 8.3 Groovy DSL, MongoDB 7.0.0
IntelliJ IDEA 2023.2.1, macOS Ventura 13.5.1

Melloware
Posts: 3717
Joined: 22 Apr 2013, 15:48

14 May 2019, 14:48

Not sure if this is your problem but do you really want rowKey="#{motocycle}" ???

Typically mine I make the primary key of whatever the pojo is like rowKey="#{motocycle.id}" or something like that.

That is what makes the rows be distinguished from each other while selecting.
PrimeFaces Developer | PrimeFaces Extensions Developer
GitHub Profile: https://github.com/melloware
PrimeFaces Elite 13.0.0 / PF Extensions 13.0.0
PrimeReact 9.6.1

NOTiFY
Posts: 393
Joined: 25 May 2016, 22:57

14 May 2019, 14:59

Thanks again. True, have made it:

Code: Select all

rowKey="#{motorcycle.id}"
Hasn't made any difference.
PF 13.0.0--Jakarta. Jakarta Faces 4.0.1/Kotlin Multiplatform 1.9.10
Mojarra 4.0.2, OmniFaces 4.2
WildFly 29.0.1.Final 'preview' Jakarta EE 10.0.0
JDK 20.0.2, Kotlin 1.9.10, Gradle 8.3 Groovy DSL, MongoDB 7.0.0
IntelliJ IDEA 2023.2.1, macOS Ventura 13.5.1

Melloware
Posts: 3717
Joined: 22 Apr 2013, 15:48

14 May 2019, 15:00

Hmmm. And you are NOT using a Lazy datatable right?
PrimeFaces Developer | PrimeFaces Extensions Developer
GitHub Profile: https://github.com/melloware
PrimeFaces Elite 13.0.0 / PF Extensions 13.0.0
PrimeReact 9.6.1

NOTiFY
Posts: 393
Joined: 25 May 2016, 22:57

14 May 2019, 15:07

I don't believe so:

Code: Select all

 <p:dataTable value="#{motorcycleController.allMotorcycles}" style="width:100%" var="motorcycle" border="1"
                         selectionMode="single"
                         selection="#{motorcycleController.selectedMotorcycle}"
                         rowKey="#{motorcycle.id}"
                         id="dataTableMotorcycles"
                         rows="20"
                         paginator="true"
                         paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
                         rowsPerPageTemplate="{ShowAll|'Show All',5,10,15,20,25,30,35,40,45,50"
                         resizableColumns="true"
                         draggableColumns="true"
                         multiViewState="true"
                         scrollable="false"
                         scrollWidth="100%">

                <p:ajax event="rowSelect" process="@this" listener="#{motorcycleController.onMotorcycleSelect}" />

                <f:facet name="header">
                    <p:commandButton id="commandButtonColumnTogglerMotorcycles" type="button" value="Columns"
                                     style="text-align: right"
                                     icon="pi pi-align-justify"/>
                    <p:columnToggler id="columnTogglerMotorcycles" datasource="dataTableMotorcycles"
                                     trigger="commandButtonColumnTogglerMotorcycles">
                        <p:ajax event="toggle"/>
                    </p:columnToggler>
                </f:facet>

                <!-- 1 of 6  -->
                <p:column sortBy="#{motorcycle.manufacturer}" headerText="Manufacturer" rendered="true">
                    <h:outputText value="#{motorcycle.manufacturer}">
                    </h:outputText>
                </p:column>

                <!-- 2 of 6  -->
                <p:column sortBy="#{motorcycle.model}" headerText="Model" rendered="true">
                    <h:outputText value="#{motorcycle.model}">
                    </h:outputText>
                </p:column>

                <!-- 3 of 6  -->
                <p:column sortBy="#{motorcycle.category}" headerText="Category" rendered="true">
                    <h:outputText value="#{motorcycle.category}">
                    </h:outputText>
                </p:column>

                <!-- 4 of 6  -->
                <p:column sortBy="#{motorcycle.dateProductionStarted}" headerText="Year Prod. Started" rendered="true">
                    <div style="text-align: center;">
                        <h:outputText value="#{motorcycle.dateProductionStarted}">
                            <f:convertDateTime pattern="yyyy"/>
                        </h:outputText>
                    </div>
                </p:column>

                <!-- 5 of 6  -->
                <p:column sortBy="#{motorcycle.dateProductionEnded}" headerText="Year Prod. Ended" rendered="true">
                    <div style="text-align: center;">
                        <h:outputText value="#{motorcycle.dateProductionEnded}">
                            <f:convertDateTime pattern="yyyy"/>
                        </h:outputText>
                    </div>
                </p:column>

                <!-- 6 of 6  -->
                <p:column sortBy="#{motorcycle.modelYear}" headerText="Model Year" rendered="true">
                    <div style="text-align: center;">
                        <h:outputText value="#{motorcycle.modelYear}">
                            <f:convertDateTime pattern="yyyy"/>
                        </h:outputText>
                    </div>
                </p:column>

                <!-- Colours -->
                <p:column headerText="Colours" rendered="#{motorcycleController.coloursColumnsRendered}">
                    <div style="text-align: center;">
                        <p:selectOneMenu id="selectOneMenuColour" value="#{motorcycleController.currentColour}"
                                         converter="omnifaces.SelectItemsConverter"
                                         valueChangeListener="#{motorcycleController.selectedColourChanged}"
                                         rendered="${motorcycle.colours.size() > 0}">
                            <f:selectItems value="#{motorcycle.colours}" var='colours'
                                           itemValue="#{colours.colour}"
                                           itemLabel="#{colours.colour}"/>
                            <p:ajax event="valueChange" execute="@this" update=""></p:ajax>
                        </p:selectOneMenu>
                    </div>
                </p:column>

                <!-- Engine -->
                <p:column sortBy="#{motorcycle.engine.type}" headerText="Engine Type"
                          rendered="#{motorcycleController.engineColumnsRendered}">
                    <div style="text-align: center;">
                        <h:outputText value="#{motorcycle.engine.type}">
                        </h:outputText>
                    </div>
                </p:column>

                <p:column sortBy="#{motorcycle.engine.displacement}" headerText="Capacity"
                          rendered="#{motorcycleController.engineColumnsRendered}">
                    <div style="text-align: center;">
                        <h:outputText value="#{motorcycle.engine.displacement}">
                            <f:convertNumber maxFractionDigits="0"/>`
                        </h:outputText>
                    </div>
                </p:column>

                <p:column sortBy="#{motorcycle.engine.capacityUnit}" headerText="Capacity Unit"
                          rendered="#{motorcycleController.engineColumnsRendered}">
                    <div style="text-align: center;">
                        <h:outputText value="#{motorcycle.engine.capacityUnit}">
                        </h:outputText>
                    </div>
                </p:column>

                <p:column sortBy="#{motorcycle.engine.bore}" headerText="Bore"
                          rendered="#{motorcycleController.engineColumnsRendered}">
                    <div style="text-align: center;">
                        <h:outputText value="#{motorcycle.engine.bore}">
                            <f:convertNumber maxFractionDigits="0"/>
                        </h:outputText>
                    </div>
                </p:column>

                <p:column sortBy="#{motorcycle.engine.boreMeasurement}" headerText="Bore Measurement"
                          rendered="#{motorcycleController.engineColumnsRendered}">
                    <div style="text-align: center;">
                        <h:outputText value="#{motorcycle.engine.boreMeasurement}">
                        </h:outputText>
                    </div>
                </p:column>

                <p:column sortBy="#{motorcycle.engine.stroke}" headerText="Stroke"
                          rendered="#{motorcycleController.engineColumnsRendered}">
                    <div style="text-align: center;">
                        <h:outputText value="#{motorcycle.engine.stroke}">
                            <f:convertNumber maxFractionDigits="0"/>
                        </h:outputText>
                    </div>
                </p:column>

                <p:column sortBy="#{motorcycle.engine.strokeMeasurement}" headerText="Stroke Measurement"
                          rendered="#{motorcycleController.engineColumnsRendered}">
                    <div style="text-align: center;">
                        <h:outputText value="#{motorcycle.engine.strokeMeasurement}">
                        </h:outputText>
                    </div>
                </p:column>

                <p:column sortBy="#{motorcycle.engine.distribution}" headerText="Distribution"
                          rendered="#{motorcycleController.engineColumnsRendered}">
                    <div style="text-align: center;">
                        <h:outputText value="#{motorcycle.engine.distribution}">
                        </h:outputText>
                    </div>
                </p:column>

                <p:column sortBy="#{motorcycle.engine.maxiumPowerHp}" headerText="Power HP"
                          rendered="#{motorcycleController.engineColumnsRendered}">
                    <div style="text-align: center;">
                        <h:outputText value="#{motorcycle.engine.maxiumPowerHp}">
                            <f:convertNumber maxFractionDigits="0"/>
                        </h:outputText>
                    </div>
                </p:column>

                <p:column sortBy="#{motorcycle.engine.maxiumPowerKilowatt}" headerText="Power Kw"
                          rendered="#{motorcycleController.engineColumnsRendered}">
                    <div style="text-align: center;">
                        <h:outputText value="#{motorcycle.engine.maxiumPowerKilowatt}">
                            <f:convertNumber maxFractionDigits="0"/>
                        </h:outputText>
                    </div>
                </p:column>

                <p:column sortBy="#{motorcycle.engine.maxiumPowerRpm}" headerText="Power RPM"
                          rendered="#{motorcycleController.engineColumnsRendered}">
                    <div style="text-align: center;">
                        <h:outputText value="#{motorcycle.engine.maximumTorqueRpm}">
                            <f:convertNumber maxFractionDigits="0"/>
                        </h:outputText>
                    </div>
                </p:column>

                <p:column sortBy="#{motorcycle.engine.maximumTorque}" headerText="Torque"
                          rendered="#{motorcycleController.engineColumnsRendered}">
                    <f:facet name="header">
                        <h:outputText value="Torque"/>
                    </f:facet>
                    <div style="text-align: center;">
                        <h:outputText value="#{motorcycle.engine.maximumTorque}">
                            <f:convertNumber maxFractionDigits="0"/>
                        </h:outputText>
                    </div>
                </p:column>

                <p:column sortBy="#{motorcycle.engine.maximumTorqueUnit}" headerText="Torque Unit"
                          rendered="#{motorcycleController.engineColumnsRendered}">
                    <div style="text-align: center;">
                        <h:outputText value="#{motorcycle.engine.maximumTorqueUnit}">
                        </h:outputText>
                    </div>
                </p:column>

                <p:column sortBy="#{motorcycle.engine.maximumTorqueRpm}" headerText="Torque RPM"
                          rendered="#{motorcycleController.engineColumnsRendered}">
                    <div style="text-align: center;">
                        <h:outputText value="#{motorcycle.engine.maximumTorqueRpm}">
                            <f:convertNumber maxFractionDigits="0"/>
                        </h:outputText>
                    </div>
                </p:column>

                <!-- Performance -->
                <p:column sortBy="#{motorcycle.performance.topSpeedMph}" headerText="Top Speed Mph"
                          rendered="#{motorcycleController.performanceColumnsRendered}">
                    <div style="text-align: center;">
                        <h:outputText value="#{motorcycle.performance.topSpeedMph}">
                            <f:convertNumber maxFractionDigits="0"/>
                        </h:outputText>
                    </div>
                </p:column>

                <p:column sortBy="#{motorcycle.performance.topSpeedKph}" headerText="Top Speed Kph"
                          rendered="#{motorcycleController.performanceColumnsRendered}">
                    <div style="text-align: center;">
                        <h:outputText value="#{motorcycle.performance.topSpeedKph}">
                            <f:convertNumber maxFractionDigits="0"/>
                        </h:outputText>
                    </div>
                </p:column>

                <p:column sortBy="#{motorcycle.performance.accelleration30Mph}" headerText="accelleration30Mph"
                          rendered="#{motorcycleController.performanceColumnsRendered}">
                    <div style="text-align: center;">
                        <h:outputText value="#{motorcycle.performance.accelleration30Mph}">
                            <f:convertNumber maxFractionDigits="0"/>
                        </h:outputText>
                    </div>
                </p:column>

                <p:column sortBy="#{motorcycle.performance.accelleration60Mph}" headerText="accelleration60Mph"
                          rendered="#{motorcycleController.performanceColumnsRendered}">
                    <div style="text-align: center;">
                        <h:outputText value="#{motorcycle.performance.accelleration60Mph}">
                            <f:convertNumber maxFractionDigits="0"/>
                        </h:outputText>
                    </div>
                </p:column>

                <p:column sortBy="#{motorcycle.performance.accelleration100Mph}" headerText="accelleration100Mph"
                          rendered="#{motorcycleController.performanceColumnsRendered}">
                    <div style="text-align: center;">
                        <h:outputText value="#{motorcycle.performance.accelleration100Mph}">
                            <f:convertNumber maxFractionDigits="0"/>
                        </h:outputText>
                    </div>
                </p:column>

                <p:column sortBy="#{motorcycle.performance.accelleration30Kph}" headerText="accelleration30Kph"
                          rendered="#{motorcycleController.performanceColumnsRendered}">
                    <div style="text-align: center;">
                        <h:outputText value="#{motorcycle.performance.accelleration30Kph}">
                            <f:convertNumber maxFractionDigits="0"/>
                        </h:outputText>
                    </div>
                </p:column>

                <p:column sortBy="#{motorcycle.performance.accelleration60Kph}" headerText="accelleration60Kph"
                          rendered="#{motorcycleController.performanceColumnsRendered}">
                    <div style="text-align: center;">
                        <h:outputText value="#{motorcycle.performance.accelleration60Kph}">
                            <f:convertNumber maxFractionDigits="0"/>
                        </h:outputText>
                    </div>
                </p:column>

                <p:column sortBy="#{motorcycle.performance.accelleration100Kph}" headerText="accelleration100Kph"
                          rendered="#{motorcycleController.performanceColumnsRendered}">
                    <div style="text-align: center;">
                        <h:outputText value="#{motorcycle.performance.accelleration100Kph}">
                            <f:convertNumber maxFractionDigits="0"/>
                        </h:outputText>
                    </div>
                </p:column>

            </p:dataTable>
PF 13.0.0--Jakarta. Jakarta Faces 4.0.1/Kotlin Multiplatform 1.9.10
Mojarra 4.0.2, OmniFaces 4.2
WildFly 29.0.1.Final 'preview' Jakarta EE 10.0.0
JDK 20.0.2, Kotlin 1.9.10, Gradle 8.3 Groovy DSL, MongoDB 7.0.0
IntelliJ IDEA 2023.2.1, macOS Ventura 13.5.1

Melloware
Posts: 3717
Joined: 22 Apr 2013, 15:48

14 May 2019, 15:19

Hmmm that all looks good. try and create a reproducible sample stripped down using PrimeFaces Test. Maybe it will help you work backwards as to what the issue is.
PrimeFaces Developer | PrimeFaces Extensions Developer
GitHub Profile: https://github.com/melloware
PrimeFaces Elite 13.0.0 / PF Extensions 13.0.0
PrimeReact 9.6.1

NOTiFY
Posts: 393
Joined: 25 May 2016, 22:57

14 May 2019, 18:54

In the PF-4477 project I used for my pagination bug:

Changed XHTML:

Code: Select all

    <p:dataTable id="tblCars" var="car" value="#{dtBasicView.cars}"
                     rows="5"
                     multiViewState="true"
                     selectionMode="single"
                     selection="#{car.id}"
                     rowKey="#{car.id}"
                     scrollWidth="100%">

            <p:ajax event="rowSelect" process="@this" listener="#{carService.onIdSelect}" />

            <f:facet name="header">
                <p:commandButton id="columnTogglerCars" type="button" value="Columns" style="float:right"
                                 icon="pi pi-align-justify"/>
                <p:columnToggler datasource="tblCars" trigger="columnTogglerCars"/>
            </f:facet>

            <p:column headerText="Id" rendered="true">
                <h:outputText value="#{car.id}"/>
            </p:column>

            <p:column headerText="Year" rendered="true">
                <h:outputText value="#{car.year}"/>
            </p:column>

            <p:column headerText="Brand" sortBy="#{car.brand}" rendered="true">
                <h:outputText value="#{car.brand}"/>
            </p:column>

            <p:column headerText="Colour" rendered="true">
                <h:outputText value="#{car.colour}"/>
            </p:column>

            <p:column headerText="Price" rendered="true">
                <h:outputText value="#{car.price}"/>
            </p:column>

            <p:column headerText="Sold" rendered="true">
                <h:outputText value="#{car.sold}"/>
            </p:column>
        </p:dataTable>
Extend & Implemented in CarService backing bean:

Code: Select all

@ManagedBean(name = "carService")
@ApplicationScoped
public class CarService extends ListDataModel<Car> implements SelectableDataModel<Car> {

    private String id;

    private final static String[] colours;

    private final static String[] brands;

    @SuppressWarnings("WeakerAccess")
    public static String[] items;

    private static boolean idColumnSelected;

    private static boolean yearColumnSelected;

    private static boolean brandColumnSelected;

    private static boolean colourColumnSelected;

    private static boolean priceColumnSelected;

    private static boolean soldColumnSelected;

    static {
        colours = new String[10];
        colours[0] = "Black";
        colours[1] = "White";
        colours[2] = "Green";
        colours[3] = "Red";
        colours[4] = "Blue";
        colours[5] = "Orange";
        colours[6] = "Silver";
        colours[7] = "Yellow";
        colours[8] = "Brown";
        colours[9] = "Maroon";

        brands = new String[10];
        brands[0] = "BMW";
        brands[1] = "Mercedes";
        brands[2] = "Volvo";
        brands[3] = "Audi";
        brands[4] = "Renault";
        brands[5] = "Fiat";
        brands[6] = "Volkswagen";
        brands[7] = "Honda";
        brands[8] = "Jaguar";
        brands[9] = "Ford";
    }

    public List<Car> createCars(int size) {
        List<Car> list = new ArrayList<Car>();
        for (int i = 0; i < size; i++) {
            list.add(new Car(getRandomId(), getRandomBrand(), getRandomYear(), getRandomColour(), getRandomPrice(), getRandomSoldState()));
        }

        System.out.println(list.size());
        return list;
    }

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

    @Override
    public Car getRowData(String s) {
        return null;
    }

    private String getRandomId() {
        return UUID.randomUUID().toString().substring(0, 8);
    }

    private int getRandomYear() {
        return (int) (Math.random() * 50 + 1960);
    }

    private String getRandomColour() {
        return colours[(int) (Math.random() * 10)];
    }

    private String getRandomBrand() {
        return brands[(int) (Math.random() * 10)];
    }

    private int getRandomPrice() {
        return (int) (Math.random() * 100000);
    }

    private boolean getRandomSoldState() {
        return (Math.random() > 0.5) ? true : false;
    }

    public List<String> getColours() {
        return Arrays.asList(colours);
    }

    public List<String> getBrands() {
        return Arrays.asList(brands);
    }

    public String[] getSelectedItems() {
        System.out.println(">>>>> getSelectedItems = " + (Object) CarService.items);

        return CarService.items;
    }

    public void setSelectedItems(final String[] items) {
        CarService.items = items;

        System.out.println(">>>>> setSelectedItems items = " + (Object) CarService.items);
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public void onIdSelect(SelectEvent selectEvent) {
        System.out.println(">>>>> onIdSelect selectEvent = " + selectEvent);
    }
When I run:
mvn jetty:run-exploded
& bring up browser have a list of cars, when I click on a row I get:
>>>>> getSelectedItems = null
100
May 14, 2019 5:50:19 PM com.sun.faces.context.PartialViewContextImpl processPartial
INFO: javax.el.PropertyNotFoundException: /test.xhtml @29,41 selection="#{car.id}": Target Unreachable, identifier [car] resolved to null
javax.el.PropertyNotFoundException: /test.xhtml @29,41 selection="#{car.id}": Target Unreachable, identifier [car] resolved to null
at com.sun.faces.facelets.el.TagValueExpression.setValue(TagValueExpression.java:133)
at org.primefaces.component.datatable.DataTable.processUpdates(DataTable.java:292)
at com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:578)
at com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:183)
at org.primefaces.component.api.UIData.visitTree(UIData.java:871)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700)
at javax.faces.component.UIForm.visitTree(UIForm.java:371)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700)
at com.sun.faces.context.PartialViewContextImpl.processComponents(PartialViewContextImpl.java:404)
at com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:267)
at org.primefaces.context.PrimePartialViewContext.processPartial(PrimePartialViewContext.java:55)
at javax.faces.component.UIViewRoot.processUpdates(UIViewRoot.java:1252)
at com.sun.faces.lifecycle.UpdateModelValuesPhase.execute(UpdateModelValuesPhase.java:78)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:857)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1655)
at org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:215)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1642)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:533)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:146)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:257)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1595)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1317)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:473)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1564)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1219)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:219)
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:126)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
at org.eclipse.jetty.server.Server.handle(Server.java:531)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:352)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:260)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:281)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:102)
at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:118)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:333)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:310)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:168)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.produce(EatWhatYouKill.java:132)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:762)
at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:680)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: javax.el.PropertyNotFoundException: Target Unreachable, identifier [car] resolved to null
at org.apache.el.parser.AstValue.getTarget(AstValue.java:74)
at org.apache.el.parser.AstValue.setValue(AstValue.java:196)
at org.apache.el.ValueExpressionImpl.setValue(ValueExpressionImpl.java:257)
at org.apache.webbeans.el22.WrappedValueExpression.setValue(WrappedValueExpression.java:93)
at com.sun.faces.facelets.el.TagValueExpression.setValue(TagValueExpression.java:131)
... 50 more

May 14, 2019 5:50:19 PM com.sun.faces.lifecycle.UpdateModelValuesPhase execute
WARNING: javax.el.PropertyNotFoundException: /test.xhtml @29,41 selection="#{car.id}": Target Unreachable, identifier [car] resolved to null
>>>>> onIdSelect selectEvent = org.primefaces.event.SelectEvent[source=org.primefaces.component.datatable.DataTable@2728514f]
It can't get the prepopulated random id from cars POJO.
Last edited by NOTiFY on 14 May 2019, 18:56, edited 1 time in total.
PF 13.0.0--Jakarta. Jakarta Faces 4.0.1/Kotlin Multiplatform 1.9.10
Mojarra 4.0.2, OmniFaces 4.2
WildFly 29.0.1.Final 'preview' Jakarta EE 10.0.0
JDK 20.0.2, Kotlin 1.9.10, Gradle 8.3 Groovy DSL, MongoDB 7.0.0
IntelliJ IDEA 2023.2.1, macOS Ventura 13.5.1

Melloware
Posts: 3717
Joined: 22 Apr 2013, 15:48

14 May 2019, 18:55

1. selection="#{car.id}" is not right it should be #{car}.

2. Are you sure Car has an ID field?
PrimeFaces Developer | PrimeFaces Extensions Developer
GitHub Profile: https://github.com/melloware
PrimeFaces Elite 13.0.0 / PF Extensions 13.0.0
PrimeReact 9.6.1

NOTiFY
Posts: 393
Joined: 25 May 2016, 22:57

14 May 2019, 19:06

Thanks. Got rid of the exception

The IDs etc. are:
Id Year Brand Colour Price Sold
96e6d363 2002 Ford Silver 44155 true
83488512 1965 Audi Maroon 36245 false
deff843d 2003 Audi Green 65660 false
ad18b761 1973 Mercedes Maroon 74514 false
685aedc0 1992 Honda Brown 41951 true
Print the id:
public void onIdSelect(SelectEvent selectEvent) {
System.out.println(">>>>> onIdSelect selectEvent = " + ((Car) selectEvent.getObject()).getId());
}
Gives:
>>>>> onIdSelect selectEvent = 685aedc0
So that works. I'll go back to my GoStopHandle Project.

Thanks once again.
Last edited by NOTiFY on 14 May 2019, 19:19, edited 1 time in total.
PF 13.0.0--Jakarta. Jakarta Faces 4.0.1/Kotlin Multiplatform 1.9.10
Mojarra 4.0.2, OmniFaces 4.2
WildFly 29.0.1.Final 'preview' Jakarta EE 10.0.0
JDK 20.0.2, Kotlin 1.9.10, Gradle 8.3 Groovy DSL, MongoDB 7.0.0
IntelliJ IDEA 2023.2.1, macOS Ventura 13.5.1

Melloware
Posts: 3717
Joined: 22 Apr 2013, 15:48

14 May 2019, 19:10

No problem.
PrimeFaces Developer | PrimeFaces Extensions Developer
GitHub Profile: https://github.com/melloware
PrimeFaces Elite 13.0.0 / PF Extensions 13.0.0
PrimeReact 9.6.1

Post Reply

Return to “PrimeFaces”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 40 guests