我正在使用Oracle ATG 10.1.2和Endeca 3.1.1(没有Endeca Experience Manager(开发Web应用程序,并正在尝试使关键字重定向功能正常工作。
最终,我试图完成的是访问从我的 JSP 层中的 Endeca 返回的关键字重定向信息(如果有的话(,以便我可以将用户重定向到关键字重定向 URL,和/或将该 URL 显示为呈现页面的一部分。
为了从 Encaca 获得结果,我们使用的是/services/guidedsearch
打包服务(如汇编程序应用程序开发人员指南 (v3.1.1( 的 p51 中所述(。
如果我使用浏览器直接从 Endeca MDEX 服务器访问原始引导式搜索输出,则可以在返回的 XML 的 endeca:redirect
属性中看到我的引导式搜索条目和 URL。 我还可以在Endeca JSP参考应用程序("橙色应用程序"(中看到没有问题的引导式搜索条目。
但是,当我使用 ATG InvokeAssembler
液滴从 Enceca 获取结果时,响应中似乎不包含endeca:redirect
条目。 返回的内容项映射仅具有以下键:
@type
, name
, navigation
, breadcrumbs
, resultsList
, searchAdjustments
, zones
, endeca:siteRootPath
, endeca:contentPath
没有像我在原始/services/guidedsearch
XML 输出中看到的那样endeca:redirect
键。
这是我的 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返回的关键字重定向信息?
您还可以开发自己的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
}
根据 Oracle Support doc 1530390.1,问题在于,在 ATG 10.1.2 中,InvokeAssembler droplet 在内部编码为 使用 Endeca ContentInclude 对象(不支持关键字重定向(,而不是使用 RedirectAwareContentIncludeHandler(支持(。
根据该知识文档,可以从 Oracle 支持部门请求修补程序 p16099140 来解决此问题。