我正在使用Oracle ATG 10.1.2和Endeca 3.1.1(没有Endeca Experience Manager)开发Web应用程序,并且正在尝试使用关键字重定向功能。
最终,我要完成的是访问我的JSP层中从Endeca返回的关键字重定向信息(如果有的话),这样我就可以将用户重定向到关键字重定向URL,和/或将该URL显示为呈现页面的一部分。
要从Endeca获取结果,我们正在使用/services/guidedsearch
打包服务(如Assembler Application Developer's Guide (v3.1.1)的第51页所述。
如果我使用浏览器直接访问Endeca MDEX服务器的原始Guided Search输出,我可以在返回的XML中的endeca:redirect
属性中看到我的引导搜索条目和URL。我还可以在Endeca JSP参考应用程序(“橙色应用程序”)中看到引导的搜索条目没有问题。
但是,当我使用ATG InvokeAssembler
Droplet从Endeca获取结果时,endeca:redirect
条目似乎不包含在响应中。返回的ContentItem映射仅具有以下键:
@type
,name
,navigation
,breadcrumbs
,resultsList
,searchAdjustments
,zones
,endeca:siteRootPath
,endeca:contentPath
没有endeca:redirect
密钥,就像我在原始/services/guidedsearch
XML输出中看到的那样。
这是我的JSP代码的相关片段:
<dsp:droplet name="/atg/endeca/assembler/droplet/InvokeAssembler">
<dsp:param name="includePath" value="/services/guidedsearch" />
<dsp:oparam name="output">
<dsp:getvalueof param="contentItem" var="contentItem" vartype="com.endeca.infront.assembler.ContentItem" />
</dsp:oparam>
</dsp:droplet>
如何访问Endeca返回的关键字重定向信息?
答案 0 :(得分:2)
您还可以开发自己的RedirectAwareHandler
,只需从SupplementList
中提取重定向。
public ContentItem process(ContentItem pContentItem) throws CartridgeHandlerException {
ENEQueryResults executeMdexRequest = executeMdexRequest(mMdexRequest);
Object redirectURL = null;
if (executeMdexRequest.getNavigation() != null && executeMdexRequest.getNavigation().getSupplements() != null){
SupplementList supplements = executeMdexRequest.getNavigation().getSupplements();
Supplement supplement = null;
for (Object object : supplements) {
if (object instanceof Supplement) {
supplement = (Supplement) object;
if (supplement.getProperties() != null) {
redirectURL = supplement.getProperties().get("DGraph.KeywordRedirectUrl");
if (redirectURL != null) {
break;
}
}
}
}
}
//And now do your redirect
}
答案 1 :(得分:1)
根据Oracle支持文档1530390.1,问题在于在ATG 10.1.2中,InvokeAssembler droplet在内部编码为使用Endeca ContentInclude对象(它不支持关键字重定向),而不是使用RedirectAwareContentIncludeHandler(一样)。
根据该知识文档,可以从Oracle支持部门请求修补程序p16099140来解决此问题。