IllegalStateException: Current item is null

Hello everyone! I have two entities -> Concourse and ConcourseRequest. In ConcourseRequest I have ManyToOne relation with Concourse entity. What I’m trying to do is, in concourse-request-browse screen I insert one field from Concourse called “name_ru”. I’ve created linkInvoke argument on that field. The logic is next, when I click to that “name_ru” field I want to be redirected to concourse-edit for that item. In UI Controller I’ve created listener where trying to compare concourse id which located in ConcourseRequest with Concourse id. But I’m getting IllegalStateException error, below I provide code:

ConcourseRequestBrowse UI Controller

@Inject
protected Screens screens;
@Inject
protected ScreenBuilders screenBuilders;
@Inject
protected CollectionContainer<ConcourseRequest> concourseRequestsDc;
@Inject
protected DataManager dataManager;
@Inject
protected CollectionLoader<ConcourseRequest> concourseRequestsDl;

public void openConcourse() {
    ConcourseRequest concourseRequest = concourseRequestsDc.getItem();
    Concourse concourse = dataManager.load(Concourse.class).query(
            "select e from tsadv_concourse e " +
                    "where e.id =: concourseId")
            .parameter("concourseId", concourseRequest.getConcourse().getId()).view("concourse-view")
            .optional()
            .orElse(null);
    EditorBuilder<Concourse> concourseEditorBuilder;
    concourseEditorBuilder = screenBuilders.editor(Concourse.class, this).editEntity(concourse);
    System.out.println(concourseRequest);
    concourseEditorBuilder.withOpenMode(OpenMode.NEW_TAB).build().show();
}

concourse-request-browse.xml

    <collection id="concourseRequestsDc"
              class="kz.uco.tsadv.modules.competition.ConcourseRequest">
        <view extends="_local">
            <property name="concourse" view="_minimal">
                <property name="name_ru"/>
                <property name="category"/>
            </property>
            <property name="status" view="_minimal"/>
            <property name="personGroup" view="_minimal">
                <property name="fullName"/>
            </property>
        </view>
        <loader id="concourseRequestsDl">
            <query>
                <![CDATA[select e from tsadv_ConcourseRequest e]]>
            </query>
        </loader>
    </collection>
             ......
       <column id="concourse.name_ru" caption="msg://concourse.name_ru" link="true" linkInvoke="openConcourse"/>

Could someone help me?

Hi,

It’s impossible to understand the reason of the error based only on the exception class name. Please provide full exception stacktrace.

Caused by: java.lang.RuntimeException: Unable to call linkInvoke method for table column
	at com.haulmont.cuba.web.gui.components.table.LinkCellClickListener.callControllerInvoke(LinkCellClickListener.java:189) ~[cuba-web-7.2.10.jar:7.2.10]
	at com.haulmont.cuba.web.gui.components.table.LinkCellClickListener.onClick(LinkCellClickListener.java:61) ~[cuba-web-7.2.10.jar:7.2.10]
	at com.haulmont.cuba.gui.components.compatibility.TableCellClickListenerWrapper.accept(TableCellClickListenerWrapper.java:50) ~[cuba-gui-7.2.10.jar:7.2.10]
	at com.haulmont.cuba.gui.components.compatibility.TableCellClickListenerWrapper.accept(TableCellClickListenerWrapper.java:24) ~[cuba-gui-7.2.10.jar:7.2.10]
	at com.haulmont.cuba.web.gui.components.WebAbstractTable.lambda$setCellClickListener$8(WebAbstractTable.java:3061) ~[cuba-web-7.2.10.jar:7.2.10]
	at com.haulmont.cuba.web.widgets.CubaTable$1.onClick(CubaTable.java:110) ~[cuba-web-widgets-7.2.10.jar:na]
	... 42 common frames omitted
Caused by: java.lang.reflect.InvocationTargetException: null
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
	at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
	at com.haulmont.cuba.web.gui.components.table.LinkCellClickListener.callControllerInvoke(LinkCellClickListener.java:187) ~[cuba-web-7.2.10.jar:7.2.10]
	... 47 common frames omitted
Caused by: java.lang.IllegalStateException: Current item is null
	at com.haulmont.cuba.gui.model.impl.InstanceContainerImpl.getItem(InstanceContainerImpl.java:69) ~[cuba-gui-7.2.10.jar:7.2.10]
	at kz.uco.tsadv.web.screens.concourserequest.ConcourseRequestBrowse.openConcourse(ConcourseRequestBrowse.java:39) ~[tsadv-web-2.0.591-SNAPSHOT.jar:na]
	... 52 common frames omitted

Method concourseRequestsDc.getItem() will not return you the entity you need.
When you are using linkInvoke, the method itself should receive the entity being clicked.

public void linkInvokeMethod(Entity item, String columnId) {
    Customer customer = (Customer) item;
    ...
}

See docs: Table - CUBA Platform. Developer’s Manual