Просто попробовал это на моем случае и:
Device device = request.adaptTo(Device.class);
возвращается null
, в то время как:
DeviceGroup deviceGroup = request.adaptTo(DeviceGroup.class);
с другой стороны, получает мне ссылку на правильный DeviceGroup
объект ,
Если вам нужно устройство, а не группа, попробуйте использовать DeviceMapper
. Оказывается, что DeviceMapper
действительно доступен как сервис, реализуемый com.day.cq.wcm.mobile.core.impl.devicemapper.DeviceMapperImpl
Поэтому в вас JSP, вы можете просто написать:
<%@ page import="com.day.cq.wcm.mobile.api.device.DeviceMapper" %>
...
<%
DeviceMapper deviceMapper = sling.getService(DeviceMapper.class);
Device device = deviceMapper.getDeviceInstance(slingRequest);
%>
И это должно дать вам правильный объект при условии, что все соответствующие конфигурации правильные.
Однако, если возможно, вы должны стараться избегать размещения такой логики в своем JSP. Этот тип кода должен быть инкапсулирован на фабрике адаптера или предпочтительно в модели Sling. Таким образом, вы сможете избавиться от всего кода от уровня представления и просто прочитать простые свойства в JSP.
Вы также можете взглянуть на com.day.cq.wcm.mobile.core.MobileUtil.class
, который может соответствовать вашему конкретному варианту использования.
Я также хотел бы отметить, что запись кода на целевом компьютере для конкретного устройства (в отличие от группы) кажется немного странной. Прежде чем вводить кучу классов для обнаружения устройства, подумайте, можно ли добиться того же результата с помощью соответствующего стиля, версии мобильного сайта Target (если целью является предоставление различного контента пользователям с разными устройствами). Или, может быть, вам стоит просто пойти за AEM Apps
Это что-то, что вы раньше делали в более ранних версиях и которое перестало работать в AEM 6.1 или что-то, чего вы еще не делали раньше? Это не похоже на то, что класс «Устройство» можно адаптировать из объекта запроса OOTB. По крайней мере, это не упоминается [в документах] (https://docs.adobe.com/docs/en/aem/6-1/develop/platform/sling-adapters.html). Рассматривая Javadoc для этого пакета, я вижу интерфейс 'DeviceMapper', который имеет метод с правильной подписью и может быть доступен как служба OSGi. Я не могу проверить это на данный момент, так как у меня нет экземпляра AEM. – toniedzwiedz
Javadoc здесь: https://docs.adobe.com/docs/en/aem/6-1/ref/javadoc/com/day/cq/wcm/mobile/api/device/package-summary.html – toniedzwiedz
Спасибо toniedzwiedz для ответа. Я попробую ваше предложение. Ценю вашу помощь. – zadd