3

私はJavaの新しい蜂です。

私の意図は、Javaプログラムの文のようなテンプレートを使用することです(JSPやWeb関連のページはありません)

例:

String name = "Jon";

"#{ name } invited you";

      or 

 String user.name = "Jon";

 "#{ user.name } invited you";

この文字列を何らかのメソッドに渡すと、次のようになります。

"Jon invited you"

私はいくつかの表現言語MVEL、OGNL、JSTLELを経験しました

MVELとOGNLでは、これを実現するためにいくつかのコードセットを作成する必要がありますが、他の方法で作成する必要があります。

これは、JavaプログラムではなくJSPファイルでのみJSTLELを使用して実現できます。

これを達成する方法はありますか?

前もって感謝します。

ジョン

4

1 に答える 1

4

これを達成する方法はありますか?

私はあなたが何を求めているのかを100%確信しているわけではありませんが、ここにいくつかの指針があります...

MessageFormatAPIのクラスを見てください。FormatterクラスやString.formatメソッドにも興味があるかもしれません。

いくつかPropertiesあり、形状のサブストリングを検索して置換したい場合は、次のよう#{ property.key }にすることもできます。

import java.util.Properties;
import java.util.regex.*;

class Test {

    public static String process(String template, Properties props) {
        Matcher m = Pattern.compile("#\\{(.*?)\\}").matcher(template);

        StringBuffer sb = new StringBuffer();
        while (m.find())
            m.appendReplacement(sb, props.getProperty(m.group(1).trim()));
        m.appendTail(sb);

        return sb.toString();
    }


    public static void main(String[] args) {
        Properties props = new Properties();
        props.put("user.name", "Jon");
        props.put("user.email", "jon.doe@example.com");

        String template = "Name: #{ user.name }, email: #{ user.email }";

        // Prints "Name: Jon, email: jon.doe@example.com"
        System.out.println(process(template, props));
    }
}

Propertiesオブジェクトではなく実際のPOJOがある場合は、次のようにリフレクションを実行できます。

import java.util.regex.*;

class User {
    String name;
    String email;
}


class Test {

    public static String process(String template, User user) throws Exception {
        Matcher m = Pattern.compile("#\\{(.*?)\\}").matcher(template);

        StringBuffer sb = new StringBuffer();
        while (m.find()) {
            String fieldId = m.group(1).trim();
            Object val = User.class.getDeclaredField(fieldId).get(user);
            m.appendReplacement(sb, String.valueOf(val));
        }
        m.appendTail(sb);
        return sb.toString();
    }


    public static void main(String[] args) throws Exception {
        User user = new User();
        user.name = "Jon";
        user.email = "jon.doe@example.com";
        String template = "Name: #{ name }, email: #{ email }";

        System.out.println(process(template, user));
    }
}

...しかし、それは醜くなってきています。これを解決するために、サードパーティのライブラリのいくつかをさらに深く掘り下げることを検討することをお勧めします。

于 2011-08-22T08:47:50.583 に答える