octobercms/october · warning · Error

The itemProperties property should be specified in the objec

Error message

The itemProperties property should be specified in the objectList editor configuration. Property: ${propertyDefinition.property}

What it means

In PageLookup::onInsertReference, after a type is supplied the widget checks the `cms_page` form field: if that field is not hidden and the submitted data contains no `cms_page` key, this ValidationException is raised against the `cms_page` field. It exists to force the user to pick which CMS page will host or resolve the inserted link.

Source

Thrown at modules/backend/assets/foundation/controls/inspector/inspector.editor.objectlist.js:18

/*
 * Inspector object list editor class.
 */
+function ($) { "use strict";

    var Base = $.oc.inspector.propertyEditors.base,
        BaseProto = Base.prototype

    var ObjectListEditor = function(inspector, propertyDefinition, containerCell, group) {
        this.currentRowInspector = null
        this.popup = null

        if (propertyDefinition.titleProperty === undefined) {
            throw new Error('The titleProperty property should be specified in the objectList editor configuration. Property: ' + propertyDefinition.property)
        }

        if (propertyDefinition.itemProperties === undefined) {
            throw new Error('The itemProperties property should be specified in the objectList editor configuration. Property: ' + propertyDefinition.property)
        }

        Base.call(this, inspector, propertyDefinition, containerCell, group)
    }

    ObjectListEditor.prototype = Object.create(BaseProto)
    ObjectListEditor.prototype.constructor = Base

    ObjectListEditor.prototype.init = function() {
        if (this.isKeyValueMode()) {
            var keyProperty = this.getKeyProperty()

            if (!keyProperty) {
                throw new Error('Object list key property ' + this.propertyDefinition.keyProperty
                    + ' is not defined in itemProperties. Property: ' + this.propertyDefinition.property)
            }
        }

View on GitHub (pinned to b608633a7e)

Solutions

  1. Select a CMS page in the popup's dropdown before inserting the link.
  2. If the chosen type does not need a CMS page, hide the field in the widget's field config so the check is skipped (`$widget->getField('cms_page')->hidden` is truthy).
  3. When calling the handler programmatically, always include `cms_page` in the payload when the field is visible.

Example fix

// before
oc.request(el, 'pagelookup::onInsertReference', {
    data: { PageLookupItem: { type: 'cms-page' } }
});

// after
oc.request(el, 'pagelookup::onInsertReference', {
    data: { PageLookupItem: { type: 'cms-page', cms_page: 'about/index' } }
});
Defensive patterns

Strategy: validation

Validate before calling

const item = { ...payload.PageLookupItem };
if (!item.cms_page && cmsPageFieldVisible) {
    showFlash('Please select a CMS page.');
} else {
    oc.request(el, 'pagelookup::onInsertReference', { data: { PageLookupItem: item } });
}

Try / catch

try {
    $result = $widget->onInsertReference();
} catch (October\Rain\Exception\ValidationException $e) {
    $errors = $e->getErrors(); // ['cms_page' => 'Please select a CMS page']
}

Prevention

When it happens

Trigger: Submitting the lookup popup with the CMS page dropdown left empty while the `cms_page` field is visible (depends on the chosen type and widget configuration); posting `PageLookupItem` data that omits `cms_page`.

Common situations: Users clicking insert before choosing a page; field configuration that shows `cms_page` for a type that does not need it; automated submissions missing the key.

Related errors


AI-assisted analysis of octobercms/october@b608633a7e (2026-08-21). Data as JSON: /api/errors/163902dcff9b821f. Report an issue: GitHub.