2009-10-16 16 views
5

.net code üzerinde NVelocity kitaplığı kullanıyorum ve VelocityEngine örneğinde Evalute yöntemini çalıştırdığımda ve şablon metnindeki parametrelerden birinde bir hata saptamak istiyorum.NVelocity'de InvalidReference hatası nasıl yakalanır

Bunu nasıl edinebilirim?

NVelocity.App.Event ad alanında IInvalidReferenceEventHandler arabirimini buluyorum, ancak nasıl kullanacağımı hiçbir bilgi bulamıyorum. Herhangi bir yardım takdir edilecektir.

cevap

3

Çözümü buldum.

yaptığım EventHandler sınıfı:

StringWriter writer = new StringWriter(); 
NVelocity.App.VelocityEngine eng = new NVelocity.App.VelocityEngine(); 
try 
{ 
    NVelocityEventHandler te = new NVelocityEventHandler(); 
    EventCartridge ec = new EventCartridge(); 
    ec.AddEventHandler(te); 
    VelocityContext vc = new VelocityContext((IDictionary)parameters); 
    ec.AttachToContext(vc); 
    eng.Evaluate(vc, writer, "templatestring", template); 
} 
catch (ParseErrorException pe) 
{ 
    return pe.Message; 
} 
catch (MethodInvocationException mi) 
{ 
    return mi.Message; 
} 
:

public class NVelocityEventHandler : IInvalidReferenceEventHandler, IMethodExceptionEventHandler 
{ 
     #region IInvalidReferenceEventHandler Members 

     public object InvalidGetMethod(NVelocity.Context.IContext context, string reference, object object_Renamed, string property, NVelocity.Util.Introspection.Info info) 
     { 
      return "InvalidGetMethod:" + reference; 
     } 

     public object InvalidMethod(NVelocity.Context.IContext context, string reference, object object_Renamed, string method, NVelocity.Util.Introspection.Info info) 
     { 
      return "InvalidMethod:" + reference; 
     } 

     public bool InvalidSetMethod(NVelocity.Context.IContext context, string leftreference, string rightreference, NVelocity.Util.Introspection.Info info) 
     { 
      return true; 
     } 

     #endregion 

     #region IMethodExceptionEventHandler Members 

     object IMethodExceptionEventHandler.MethodException(Type claz, string method, Exception e) 
     { 
      return "MethodException:" + method; 
     } 

     #endregion 
} 

Sonra aşağıdaki kodu kullanabilirsiniz

İlgili konular