私は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の最初の文字が小文字であるということです。属性のゲッターおよびセッター関数を作成するとき。最初の文字を大文字に変更する必要があります。
誰もそれを行う方法を知っていましたか?
これらのオブジェクトに対して標準のJavaメソッドを呼び出すことができます。_s_attribute.name
_がString型の場合、$s_attribute.name.toUpperCase()
を直接使用するか、特定の場合に$s_attribute.name.substring(0,1).toUpperCase()
を使用しますおよび$s_attribute.name.substring(1).toLowerCase()
DisplayTool
にはcapitalize()
メソッドがあります:
get${display.capitalize($s_attribute.name)}()
commons-lang
を使用している場合、StringUtils
クラスを使用できます。
context.put("StringUtils", org.Apache.commons.lang3.StringUtils.class);
次に、テンプレートで:
...
return get$StringUtils.capitalize(s_attribute.name)();
...
2つのメソッドgetName()
とgetname()
を作成するだけで、_${s_attribute.name}
_速度を使用するとgetname()
を使用し、_${s_attribute.Name}
_速度を使用するとgetName()
メソッドを使用します。
速度ガイド :
プロパティ検索ルール
前述のように、プロパティは多くの場合、親オブジェクトのメソッドを参照します。要求されたプロパティに対応するメソッドを特定するとき、Velocityは非常に賢い方法です。いくつかの確立された命名規則に基づいて、さまざまな代替案を試します。正確なルックアップシーケンスは、プロパティ名が大文字で始まるかどうかによって異なります。 $ customer.addressなどの小文字の名前の場合、シーケンスは
_getaddress() getAddress() get("address") isAddress()
_$ customer.Addressのような大文字のプロパティ名の場合、わずかに異なります。
_getAddress() getaddress() get("Address") isAddress()
_
私が提案しているのは、バックエンドのオブジェクトでそれを処理することです。