Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsp 用于检测请求页面不工作的设备的吊索适配器(在CQ AEM 6.1中)_Jsp_Adobe_Aem_Sling - Fatal编程技术网

Jsp 用于检测请求页面不工作的设备的吊索适配器(在CQ AEM 6.1中)

Jsp 用于检测请求页面不工作的设备的吊索适配器(在CQ AEM 6.1中),jsp,adobe,aem,sling,Jsp,Adobe,Aem,Sling,设备变量总是null。这个问题是在Adobe论坛上提出的,但没有人回答。如果您能分享解决此问题的经验,我们将不胜感激 注意:slingRequest已经在global.jsp中定义了,我现在正在做同样的事情。你不能直接从请求中获取设备,首先获取设备组,然后从中获取你想要的任何东西 final DeviceGroup DeviceGroup=slingRequest.adapto(DeviceGroup.class); 如果(deviceGroup!=null)deviceGroup.drawHe

设备变量总是null。这个问题是在Adobe论坛上提出的,但没有人回答。如果您能分享解决此问题的经验,我们将不胜感激


注意:slingRequest已经在global.jsp中定义了,我现在正在做同样的事情。你不能直接从请求中获取设备,首先获取设备组,然后从中获取你想要的任何东西

final DeviceGroup DeviceGroup=slingRequest.adapto(DeviceGroup.class);
如果(deviceGroup!=null)deviceGroup.drawHead(pageContext);

我现在正在做同样的事情。你不能直接从请求中获取设备,首先获取设备组,然后从中获取你想要的任何东西

final DeviceGroup DeviceGroup=slingRequest.adapto(DeviceGroup.class);
如果(deviceGroup!=null)deviceGroup.drawHead(pageContext);

刚刚在我的实例上尝试了此操作,并且:

<%@ page import="com.day.cq.wcm.mobile.api.device.*"%>
<% 
Device device = slingRequest.adaptTo(Device.class);

if(device != null) {
        DeviceGroup deviceGroup = device.getDeviceGroup();

        String userAgent = device.getUserAgent();
        out.write("  Test\n");
    }

%>  
返回
null
,同时:

Device device = request.adaptTo(Device.class);
另一方面,获取对有效
DeviceGroup
对象的引用

如果需要设备而不是组,请尝试使用
deviceapper
。看来,
DeviceMapper
确实是由
com.day.cq.wcm.mobile.core.impl.DeviceMapper.DeviceMapperImpl

因此,在JSP中,您可以简单地编写:

DeviceGroup deviceGroup = request.adaptTo(DeviceGroup.class);

...
如果所有相关的配置都正确的话,这应该会给您提供正确的对象

然而,如果可能的话,您应该尽量避免在JSP中放置这样的逻辑。 这种代码应该封装在适配器工厂中,或者最好封装在吊索模型中。这样,您就可以从表示层中删除所有代码,只需读取JSP中的简单属性

您可能还想看看可能适合您特定用例的
com.day.cq.wcm.mobile.core.MobileUtil.class


我还想指出,编写针对特定设备(相对于组)的后端代码似乎有点奇怪。在引入一系列类来检测设备之前,请考虑是否可以使用适当的样式、移动站点版本、目标(如果目的是为使用不同设备的用户提供不同的内容)来实现相同的结果。或者,您可以选择

在我的实例上尝试了以下方法:

<%@ page import="com.day.cq.wcm.mobile.api.device.*"%>
<% 
Device device = slingRequest.adaptTo(Device.class);

if(device != null) {
        DeviceGroup deviceGroup = device.getDeviceGroup();

        String userAgent = device.getUserAgent();
        out.write("  Test\n");
    }

%>  
返回
null
,同时:

Device device = request.adaptTo(Device.class);
另一方面,获取对有效
DeviceGroup
对象的引用

如果需要设备而不是组,请尝试使用
deviceapper
。看来,
DeviceMapper
确实是由
com.day.cq.wcm.mobile.core.impl.DeviceMapper.DeviceMapperImpl

因此,在JSP中,您可以简单地编写:

DeviceGroup deviceGroup = request.adaptTo(DeviceGroup.class);

...
如果所有相关的配置都正确的话,这应该会给您提供正确的对象

然而,如果可能的话,您应该尽量避免在JSP中放置这样的逻辑。 这种代码应该封装在适配器工厂中,或者最好封装在吊索模型中。这样,您就可以从表示层中删除所有代码,只需读取JSP中的简单属性

您可能还想看看可能适合您特定用例的
com.day.cq.wcm.mobile.core.MobileUtil.class


我还想指出,编写针对特定设备(相对于组)的后端代码似乎有点奇怪。在引入一系列类来检测设备之前,请考虑是否可以使用适当的样式、移动站点版本、目标(如果目的是为使用不同设备的用户提供不同的内容)来实现相同的结果。或者,您应该去看看

这是您以前在早期版本中做过的,但在AEM 6.1中停止工作的事情,还是您以前没有做过的事情?看起来,
设备
类不能从请求对象OOTB进行调整。至少没有提到。查看这个包的Javadoc,我可以看到一个
DeviceMapper
接口,它有一个具有正确签名的方法,并且可能作为OSGi服务提供。我目前无法验证这一点,因为我手头没有AEM实例。我会试试你的建议。感谢您的帮助。您正试图从
设备
实例检索哪些信息?我确实发现了一个作为OSGi服务公开的
DeviceMapper
实现,但我很难让它返回有意义的东西。很可能是因为我在实例上有映射,而在项目中没有使用映射。正如Shivani在回答中所建议的那样,我还设法适应了设备组。你确定你需要一个特定的设备吗?基本上,我正在创建一个基于操作系统和设备呈现内容的组件。将来我可能会用到更多的信息。我相信它使用wurfl.xml(数据库)作为映射设备,所以我不必使用regex手动筛选…你知道我的意思是,这是你在早期版本中经常做的事情,在AEM 6.1中停止工作,还是你以前没有做过的事情?看起来,
设备
类不能从请求对象OOTB进行调整。至少没有提到。查看这个包的Javadoc,我可以看到一个
DeviceMapper
接口,它有一个具有正确签名的方法,并且可能作为OSGi服务提供。我目前无法验证这一点,因为我手头没有AEM实例。我会试试你的建议。感谢您的帮助。您正试图从
设备
实例检索哪些信息?我确实找到了
设备apper的一个实现