1

私はこれにこだわっています。

public String getMessage(String id)
{
    log.error("passing parameter "+id+" "+id.getClass().getName());
    if(id.compareTo("1")==0)
    {
        return "nothing perfect";
    }
    else {return "All done";}
}

.vm

#set($parameter="1")
#set($message = $action.getMessage("$parameter").show())
<td>$message</td>`

レンダリングされた HTML で$message. 実際のメッセージが届かないのはなぜですか?

4

2 に答える 2

4

速度のドキュメントから:

Velocity は、実際の Java オブジェクトの見せかけにすぎません...

そのため、Velocity テンプレート内のクラスのパブリック メソッドにアクセスするには、関連するクラスのオブジェクトが Velocity テンプレートから見える必要があります。

public class MessageSource {

    public String getMessage(String id){
        log.error("passing parameter "+id+" "+id.getClass().getName());
        if(id.compareTo("1")==0){
            return "nothing perfect";
        } else { 
            return "All done";
        }
    }

}

のオブジェクトを公開しますMessageSource

/*  first, get and initialize an engine  */
VelocityEngine ve = new VelocityEngine();
ve.init();
/*  next, get the Template  */
Template t = ve.getTemplate( "helloworld.vm" );
/*  create a context and add data */
VelocityContext context = new VelocityContext();
context.put("messageSource", new MessageSource());
/* now render the template into a StringWriter */
StringWriter writer = new StringWriter();
t.merge( context, writer );
/* show the World */
System.out.println( writer.toString() );  

したがって、速度テンプレートでは...

$messageSource.getMessage("identifier")

于 2016-11-22T10:57:36.433 に答える
3

関数を速度で直接渡すことはできません。

テスト.java

public class Test {

    Message mg = new Message(); 
    context.put("formatter", mg);         
}

メッセージ.java

public class Message {

    public String getMessage(String id){
        log.error("passing parameter "+id+" "+id.getClass().getName());
        if(id.compareTo("1")==0){
            return "nothing perfect";
        } else { 
            return "All done";
        }
    }
}

example.vm

#set($parameter="1")
#set($message = $formatter.Message($parameter))
<td>$message</td>
于 2016-11-22T07:27:12.607 に答える