速度字符串函数

发布于 2024-11-28 19:56:58 字数 771 浏览 0 评论 0原文

我刚刚开始使用 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 函数时。我需要将第一个字符更改为大写。

有人知道该怎么做吗?

I just start using Java Velocity.
Now I want to create a java class template.

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
}

The problem is s_attribute.name first character is lowercase. When I create getter and setter function for attributes. I need change first character to uppercase.

Did anyone know how to do it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

幸福%小乖 2024-12-05 19:56:58

您可以在这些对象上调用标准 java 方法。如果 s_attribute.name 是 String 类型,您可以直接使用 $s_attribute.name.toUpperCase() 或根据您的具体情况使用 $s_attribute.name.substring(0 ,1).toUpperCase()$s_attribute.name.substring(1).toLowerCase()

You can invoke standard java methods on these objects. If s_attribute.name is type String you can directly use $s_attribute.name.toUpperCase() or for your specific case use $s_attribute.name.substring(0,1).toUpperCase() and $s_attribute.name.substring(1).toLowerCase()

孤独陪着我 2024-12-05 19:56:58

显示工具。在模板中,您可以执行以下操作:

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

您将需要对类路径的额外依赖项:

<dependency>
    <groupId>org.apache.velocity.tools</groupId>
    <artifactId>velocity-tools-generic</artifactId>
    <version>3.1</version>
</dependency>

并且您需要将 display 实例添加到上下文

    VelocityContext context = new VelocityContext();
    context.put("display", new DisplayTool());

There is capitalize() method in DisplayTool. In the template you can do:

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

You will need the extra dependency on the classpath:

<dependency>
    <groupId>org.apache.velocity.tools</groupId>
    <artifactId>velocity-tools-generic</artifactId>
    <version>3.1</version>
</dependency>

And you need to add a the display instance to the context

    VelocityContext context = new VelocityContext();
    context.put("display", new DisplayTool());
留一抹残留的笑 2024-12-05 19:56:58

如果您使用的是commons-lang,您可以使用StringUtils类:

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

然后在您的模板中:

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

If you are using commons-lang you can use the StringUtils class:

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

Then in your template:

...
return  get$StringUtils.capitalize(s_attribute.name)();
...
青芜 2024-12-05 19:56:58

您只需创建 2 个方法 getName()getname()
那么当您使用 ${s_attribute.name} 速度时将使用 getname() ,当您使用 ${s_attribute.Name} 速度时将使用getName() 方法。

摘自速度指南

属性查找规则

正如前面提到的,属性通常指的是
父对象。 Velocity 在确定哪种方法时非常聪明
对应于所请求的属性。它尝试了不同的
基于几个已建立的命名约定的替代方案。这
确切的查找顺序取决于属性名称是否
以大写字母开头。对于小写名称,例如
$customer.address,顺序为

<前><代码>getaddress()
获取地址()
获取(“地址”)
是地址()

对于像 $customer.Address 这样的大写属性名称,它略有不同:

getAddress()
获取地址()
获取(“地址”)
是地址()

我建议您在后端的对象中处理它。

You could just create 2 methods getName() and getname()
then when you use ${s_attribute.name} velocity will use getname() and when you use ${s_attribute.Name} velocity will use the getName() method.

From the Velocity guide:

Property Lookup Rules

As was mentioned earlier, properties often refer to methods of the
parent object. Velocity is quite clever when figuring out which method
corresponds to a requested property. It tries out different
alternatives based on several established naming conventions. The
exact lookup sequence depends on whether or not the property name
starts with an upper-case letter. For lower-case names, such as
$customer.address, the sequence is

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

For upper-case property names like $customer.Address, it is slightly different:

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

What i'm suggesting is that you handle it in your object on the backend.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文