2011-08-09 95 views
23

我剛開始使用Java Velocity。 現在我想創建一個java類模板。速度字符串函數

package $app.package_namespace 
public class ${app.name}Station 

{ 
    #foreach($s_attribute in $app.station) 
     $s_attribute.type $s_attribute.name, 
    #end 
    public $app.name Station(#foreach($s_attribute in $app.station) 
           $s_attribute.type $s_attribute.name; 
          #end) 
{ 
    #foreach($s_attribute in $app.station) 
      $s_attribute.name=$s_attribute.name; 
    #end 
} 
#foreach($s_attribute in $app.station) 
    public ${s_attribute.type} get${s_attribute.name}() 
    { 
     return get${s_attribute.name}(); 
    } 
#end 
} 

問題是s_attribute.name第一個字符是小寫。當我爲屬性創建getter和setter函數時。我需要將第一個字符改爲大寫。

有人知道該怎麼做嗎?

回答

24

您可以在這些對象上調用標準的java方法。如果s_attribute.name是String類型,你可以直接使用$s_attribute.name.toUpperCase()或爲您的特定情況下使用$s_attribute.name.substring(0,1).toUpperCase()$s_attribute.name.substring(1).toLowerCase()

+0

我希望你的意思是'toUpperCase'和'toLowerCase'? – adarshr

+0

是的,在這種情況下,相同的宏必須爲第一個字符應用兩次,而在字符串的其餘部分應用一次。就個人而言,這是表示層,我會避免它。此外,在執行'toLowerCase'的第二個字符串是一個壞主意,如果您的validable被稱爲customerName,那麼您會希望生成的方法是getCustomerName而不是getCustomername。 – Ali

+0

@adarshr Oppa是的..我的意思是toUpperCase()/ toLowerCase() - 自去年以來做任何Java! - 但是,你明白了。 –

2

你可以只創建2種方法getName()getname() 然後當你使用${s_attribute.name}速度將使用getname(),當你使用${s_attribute.Name}速度將使用getName()方法。

Velocity guide

屬性查找規則

正如前面提到的,性能往往指 父對象的方法。當找出哪一種方法 對應於所請求的屬性時,速度非常聰明。它根據幾個已建立的命名約定嘗試不同的 替代方案。 確切的查找順序取決於屬性名稱 是否以大寫字母開頭。對於小寫的名稱,如 $ customer.address,序列

getaddress() 
getAddress() 
get("address") 
isAddress() 

對於像$ customer.Address大寫的屬性名稱,它是略有不同:

getAddress() 
getaddress() 
get("Address") 
isAddress() 

我所建議的是你在後臺對象中處理它。

11

capitalize()方法DisplayTool

get${display.capitalize($s_attribute.name)}() 
+0

哦,甜美!我看到在API中大寫,但認爲它是在後端格式化文本。這種用法也很有意義! – Ali

+1

這個'$ {display.capitalize(...)}'不適合我。我的輸出有'$ {display.capitalize(...)}'。我是否需要爲DisplayTool增加額外的功能?我正在使用直線上的香草速度1.7 –

+3

@KarthicRaghupathi DisplayTool在一個獨立的依賴關係中稱爲velocity-tools。 確保包含它,然後將DisplayTool添加到VelocityContext中。 vc.put(「display」,new DisplayTool()); – AJD

2

如果您正在使用commons-lang可以使用StringUtils類:

context.put("StringUtils", org.apache.commons.lang3.StringUtils.class); 

然後在您的模板中:

... 
return get$StringUtils.capitalize(s_attribute.name)(); 
...