0
我使用Apache速度的模板,看起来像这样来代替令牌:检查令牌已经取代
<batch>
#set($appName = "helloworld")
#set($appDisplayName = "Hello World App")
#set($appVersion = "1.0")
<registerapplication>
<appkey>$appkey</appkey>
<appname>$appName</appname>
<appversion>$appVersion</appversion>
<appdescriptiondefault>$appDisplayName</appdescriptiondefault>
</registerapplication>
</batch>
下面三行代码做的伎俩:
Velocity.init();
StringWriter w = new StringWriter();
Velocity.evaluate(new VelocityContext(), w, "", new InputStreamReader(inputStream);
它的工作原理完美,但我有一个额外的要求。如果真的进行了一些替换,用户应该收到通知。否则,即,如果模板看起来像
<batch>
#set($appName = "helloworld")
#set($appDisplayName = "Hello World App")
#set($appVersion = "1.0")
<registerapplication>
<appkey>$appkey</appkey>
<appname>helloworld</appname>
<appdescriptiondefault>Hello World App</appdescriptiondefault>
</registerapplication>
</batch>
不应采取任何行动。
任何想法如何实现?
upd感谢克劳德布里森。我的解决方案如下所示:
VelocityContext velocityContext = new VelocityContext();
EventCartridge eventCartridge = new EventCartridge();
velocityContext.attachEventCartridge(eventCartridge);
eventCartridge.addReferenceInsertionEventHandler(new ReferenceInsertionEventHandler()
{
@Override
public Object referenceInsert(String reference, Object value)
{
if (!varSubsituted && value != null)
{
varSubsituted = true;
}
return value;
}
});