关于用于XPM更新预览问题的ADF解决方案


1

当我点击“更新预览”时,“更新预览”显示一次又一次。

由于Real URL与Broker DB的URL不同,因此会发生上述问题。

所以,我用ADF解决了这个问题。

我指的是后续页面。以下页面对我来说非常有用。

http://docs.sdl.com/LiveContent/content/en-US/SDL%20Tridion%20full%20documentation-v1/GUID-C6537469-7D70-4F82-B6C9-7883213F9F1B

http://jaimesantosalcon.blogspot.jp/2013/10/managing-claims-and-their-scope-in-sdl.html

http://erichuiza.blogspot.jp/2012/07/ambient-data-framework-in-nutshell.html

https://github.com/TridionPractice/tridion-practice/blob/master/AmbientDataFramework/ClaimStore.jsp

首先,要了解ADF程序,我实现了方便的程序。

  1. 实施方案,并建立
package com.tridion.tag.common; 

import java.io.File; 
import java.io.FileWriter; 
import java.net.URI; 
import java.util.Map; 
import java.util.TreeMap; 

import com.tridion.ambientdata.AmbientDataException; 
import com.tridion.ambientdata.claimstore.ClaimStore; 
import com.tridion.ambientdata.processing.AbstractClaimProcessor; 

public class AmbientDataFrameworkExtensionHandler extends AbstractClaimProcessor { 

    @Override 
    public void onRequestStart(ClaimStore claimStore) throws AmbientDataException { 
     try { 
      TreeMap<String, Object> claims = new TreeMap<String, Object>(); 
      Map<URI, Object> allClaims = claimStore.getAll(); 
      File file1 = new File("/tmp/log_adf1.txt"); 
      for (URI claimUri : allClaims.keySet()) { 
       claims.put(claimUri.toString(), allClaims.get(claimUri)); 
      } 
      FileWriter filewriter = new FileWriter(file1); 
      filewriter.write("onRequestStart"); 
     } catch (Exception e) { 
      throw new AmbientDataException(e); 
     } 
    } 

    @Override 
    public void onRequestEnd(ClaimStore claimStore) throws AmbientDataException { 
     try { 
      File file = new File("/tmp/log_adf2.txt"); 
      FileWriter filewriter = new FileWriter(file); 
      filewriter.write("onRequestEnd"); 
     } catch (Exception e) { 
      throw new AmbientDataException(e); 
     } 
    } 

    @Override 
    public void onSessionStart(ClaimStore claimStore) throws AmbientDataException { 
     try { 
      File file = new File("/tmp/log_adf3.txt"); 
      FileWriter filewriter = new FileWriter(file); 
      filewriter.write("onRequestEnd"); 
      filewriter.write(claimStore.getAll().size()); 
     } catch (Exception e) { 
      throw new AmbientDataException(e); 
     } 
    } 
} 
  • 创建cd_ambient_cartridge_conf.xml(配置文件)

    <ClaimDefinitions> 
         <ClaimDefinition Uri="tcd:claim:userid" Scope="SESSION" Description="The user's unique identifier." /> 
    </ClaimDefinitions> 
    
    <ClaimProcessorDefinitions> 
         <ClaimProcessorDefinition Uri="tcd:claimprocessor:example:userdetails" ImplementationClass="com.tridion.tag.common.AmbientDataFrameworkExtensionHandler" 
                   Description="Example"> 
         </ClaimProcessorDefinition> 
    </ClaimProcessorDefinitions> 
    

  • 配置cd_ambient_conf.xml

  • 重启web服务

  • 访问网页

  • 确认结果

    我确认log_adf1.txt和log_adf2.txt在tmp目录下创建。 但上述文件为0 KB,并且不输出任何错误。 我期望这些文件被描述为每个“onRequestStart”,“onRequestEnd”。

  • 为什么预期 是我的程序不好,我understarding错误的程序无法正常工作?

    1

    这个问题有很多部分,但我会试着回答你最后一个关于为什么日志文件是0字节的问题。

    我认为这是由于您没有正确关闭文件造成的。我相信你需要调用FileWriter的close()方法来刷新和解锁文件。

    请参阅如何做几个不同的例子如下回答:

    Best way to close nested streams in Java 6

      0

    谢谢你回答我的问题并解决问题。我错了。接下来,我尝试解决真正的问题(更新预览)。事实上,我不知道如何通过使用ADF解决 06 1月. 162016-01-06 03:05:22