2012-12-14 17 views
5

Velocity VelocityContext'de hiçbir değer bulunamadıysa, yani şablon dosyamda $ adı yoksa, VelocityContext'de "name" için bir değer bulunmadığında, etiket adını yazdırın, böylece "$ name" yazdı. Değişken için herhangi bir değer yoksa Hız'ın bir varsayılan değer basmasını istiyorum, sadece AbstractCotnext'i genişletmeyi ve internalGet() yöntemini geçersiz kılmayı denedim, ancak internalGet() öğesinin dönüş değeri Node nesnesine dönüştürülecektir, bilmiyorum internalGet() yöntemimde yeni bir Node nesnesi nasıl oluşturulur ve ayrıca bu yolun çok karmaşık olduğunu düşünüyorum.Velocity VelocityContext'de bir değer bulunmadığında Velocity değişken için bir varsayılan değer ayarlayabilir mi?

Varsayılan bir değer belirlemenin basit bir yolu var mı (varsayılan değer sadece bir dizgidir)?

Teşekkürler. aşağıdaki gibi

cevap

16

Değil kolayca bildiğim kadarıyla gördüğünüz gibi tüm değişkenler için, sadece özel olarak bazı değişkenler için bunu başardı:

Şablon:

#if (!$somevar) 
#set ($somevar = "mycontent") 
#end 

Var is: $somevar 

Sonuç:

Var is: mycontent 
-1

Velocity internals'ı kandırmak için yapabileceğiniz birkaç şey var. this question'a bir göz atın.

2

Bunu yaygın bir şekilde değerlendirmek için Velocity ReferenceInsertionEventHandler için Google'ı çevirin.

#macro(defaultValue $parm) 
#if (!$!parm || $!parm == "") 
i-like-will 
#else 
$parm 
#end 
#end 

Ve aynı şablonda böyle diyoruz:

+0

sayesinde her vücut bakın ve bana başka bir soru sormak için izin: çıkışını Değişken adını değiştirmek işlemek için bir yol var? Örneğin, değişken adı şablon dosyasındaki userName'dir, ancak VelocityContext'te, anahtar USERNAME şeklindedir, değişken ismini oluşturmadan önce büyük harfle değiştirmek istiyorum. – hiway

6

Şablonunuzdaki bir velocimacro oluşturun (VelocityTools projenin parçası) bireysel durumlar için DisplayTool en alt() yöntemini düşünün

#defaultValue($name) 

Velocimacros (ve genel olarak hız) hakkında daha fazla bilgi için Apache Velocity - Velocity User Guide'u kontrol edin.

+1

Neden # sembolünüzün önünde \ simge var? Makroları düşündüm ve eğer ifadeler #macro ve #if not \ #if –

+0

olarak tanımlandıysa Siz doğrusınız, formatlamanın nasıl dağıldığını bilmiyorum.Onu tamir ettim. –

+0

Teşekkürler, özlediğim bazı özel anlamları olduğunu düşündüm :-) –

0

Partiye biraz geç, ancak bir değişken tanımlarken bir kontrol de gerçekleştirebilirsiniz. Ben çıktıda aşırı boşluğu kaldırmak için bir satıra bu sıkıştırmak zorunda kaldı, ama burada benim projelerin birinden bir örnek:

Standart sınıfı tanımlanır
#set ($qlDefault = "qlinks") 
#set ($qlClass = "#if($sharedCtaImage.getChild('path').value != '/')$qlDefault#else$qlDefault full#end") 

, o zaman ben başka olmadığını kontrol spesifik değer girilmişse Varsayılan sınıfı mı sakladığımı veya ek bir sınıf ekleyip eklemeyeceğimi belirlemek için. Bu aynı zamanda sınıfları değiştirmek için de işe yarayabilir.

İlgili konular