2011-08-09 62 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)(); 
...