Liferay 7: Извлеченное значение настраиваемого поля с использованием javascript api jsonws return java.lang.NullPointerException - PullRequest
0 голосов
/ 03 января 2019

Я очень новичок в Liferay, я создал настраиваемое поле страницы , используя «панель управления> конфигурация> настраиваемые поля> страница». Моя цель - извлечь значение из настраиваемого поля страницы и отобразить значение в моем настраиваемом портлете. Один из методов, которые я попробовал, - это использование API ExpandoValue / get-data из веб-службы liferay json, и этот API создается из localhost: 8080 / api / jsonws. Ниже представлен сгенерированный javascript API:

Liferay.Service(
  '/expandovalue/get-data',
  {
    companyId: themeDisplay.getCompanyId(),
    className: 'com.liferay.portal.model.Page',
    tableName: 'CUSTOM_FIELDS',
    columnNames: 'pageDetail',
    classPK: themeDisplay.getUserId()
  },
  function(obj) {
    console.log(obj);
  }
);

Однако этот API выдает ошибку: java.lang.NullPointerException . Я думаю, что эта ошибка возникает из-за разрешения, предоставленного пользовательскому полю. Итак, я поставил галочку для прав на просмотр и обновление гостя. Но проблема остается.

У меня вопрос, что вызвало эту ошибку и как ее исправить, и есть ли какое-либо другое решение, которое я могу использовать для получения значения из пользовательского поля страницы?

Заранее спасибо.

Редактировать

У меня возникло недоразумение при назначении атрибутов для API, и вот новый API, предложенный Олафом.

Liferay.Service(
  '/expandovalue/get-data',
  {
    companyId: 20115,
    className: 'com.liferay.portal.kernel.model.Layout',
    tableName: 'CUSTOM_FIELDS',
    columnName: 'details',
    classPK: themeDisplay.getLayoutId()
  },
  function(obj) {
    console.log(obj);
  }
);

Работает нормально. Однако он принял только значение по умолчанию, но не значение, назначенное для этих конкретных страниц.

1 Ответ

0 голосов
/ 03 января 2019

Если память мне не изменяет, стандартный удаленный API не может использоваться неаутентифицированными пользователями, но требует хотя бы авторизованного пользователя (помимо обычных разрешений, конечно).

Вы можете проверить это, получив доступ к API из зарегистрированных учетных записей с такими же разрешениями. Если это работает там, то это то, с чем вы сталкиваетесь.

Однако, когда я правильно интерпретирую вызов в вашем вопросе, текущий идентификатор пользователя будет основным ключом для настраиваемого поля, которое вы просматриваете (глядя на ваше значение classPK). Для настраиваемого поля на странице я бы ожидал идентификатор страницы (layoutId в терминах Liferay-API). И пока я вижу это, я замечаю com.liferay.portal.model.Page в вашем фрагменте. Я не видел этот класс, и страницы скорее можно найти в com.liferay.portal.kernel.model.Layout (при условии Liferay 7.1 )

Это заставляет меня задуматься о том, чего вы здесь добиваетесь - вы скорее ищете поле для конкретного пользователя (тогда это будет пользовательское поле для пользователя) или действительно поле для конкретной страницы? В любом случае - поскольку это ответ, а не комментарий, он может дать достаточно подсказок, чтобы попробовать и приблизиться к решению.

...