web-dev-qa-db-fra.com

Fonction chaîne de vélocité

Je commence juste à utiliser Java Velocity. Maintenant, je veux créer un modèle de classe 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
}

Le problème est que s_attribute.name le premier caractère est en minuscule. Quand je crée la fonction getter et setter pour les attributs. J'ai besoin de changer le premier caractère en majuscule.

Quelqu'un savait-il comment le faire?

28
Yiming

Vous pouvez invoquer les méthodes standard Java sur ces objets. Si s_attribute.name Est de type String, vous pouvez directement utiliser $s_attribute.name.toUpperCase() ou pour votre cas spécifique utiliser $s_attribute.name.substring(0,1).toUpperCase() et $s_attribute.name.substring(1).toLowerCase()

33
d-live

Il existe une méthode capitalize() dans DisplayTool :

get${display.capitalize($s_attribute.name)}()
11
serg

Si vous utilisez commons-lang vous pouvez utiliser la classe StringUtils:

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

Puis dans votre modèle:

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

Vous pouvez simplement créer 2 méthodes getName() et getname() puis lorsque vous utilisez ${s_attribute.name} La vélocité utilisera getname() et lorsque vous utilisez ${s_attribute.Name} velocity utilisera la méthode getName().

À partir du Guide de vitesse :

Règles de recherche de propriété

Comme mentionné précédemment, les propriétés font souvent référence aux méthodes de l'objet parent. Velocity est assez intelligent pour déterminer quelle méthode correspond à une propriété demandée. Il essaie différentes alternatives basées sur plusieurs conventions de nommage établies. La séquence de recherche exacte dépend du fait que le nom de la propriété commence ou non par une lettre majuscule. Pour les noms en minuscules, tels que $ customer.address, la séquence est

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

Pour les noms de propriété en majuscule comme $ customer.Address, il est légèrement différent:

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

Ce que je suggère, c'est que vous le manipuliez dans votre objet sur le backend.

2
Ali