branaway / Japid

A Java-based statically-typed fast template engine that can be used in any Java code. It has special adapter for use with the Play! Framework.
113 stars 18 forks source link

[feature request] - Ability to specify default value for template args #15

Closed tunggad closed 13 years ago

tunggad commented 13 years ago

Something like this is would be nice:

@args String arg1, Integer arg2=0, Boolean arg3=false

This is a String = <span style="color: green;">'${arg1}'</span>
and this an Integer = <span style="color: blue;">~{arg2 + 1}</span>
and Boolean = <span style="color: #ff0000;">'${!arg3}'</span>
branaway commented 13 years ago

sure. Let me see how soon I can get my hands on this. In the meantime, latest code in the repo give primitive parameters a default value in the Java way: int defaults to 0, boolean defaults to false, etc. Strings default to "", not null. All other objects default to null.

branaway commented 13 years ago

The latest 0.8.8 version added defaults, using the java annotation style:

`( @Default(123) int i, @Default("something") String msg )

Check it out!

The choice of using annotation was due to the available robust Java syntax parser. I don't have a robust parser to support your suggested style.

tunggad commented 13 years ago
`( String name, String url, String type, String data, String reRender,
    @default("html") String dataType,
    String beforeSend, String success, String jsData, Boolean cache, String event
)

---> error:

[Japid] Transforming template: app\japidviews_tags\ajax.html to: ajax.java java.lang.RuntimeException: the line does not seem to be a valid param declaration list: String name, String url, String type, String data, String reRender, @default("html") String dataType, String beforeSend, String success, String jsData, Boolean cache, String event

at cn.bran.japid.compiler.JavaSyntaxTool.parseParams(JavaSyntaxTool.java:92)
at cn.bran.japid.classmeta.TemplateClassMetaData.renderMethod(TemplateClassMetaData.java:129)
at cn.bran.japid.classmeta.AbstractTemplateClassMetaData.generateCode(AbstractTemplateClassMetaData.java:689)
at cn.bran.japid.compiler.JapidAbstractCompiler.hop(JapidAbstractCompiler.java:837)
at cn.bran.japid.compiler.JapidAbstractCompiler.compile(JapidAbstractCompiler.java:91)
at cn.bran.japid.compiler.JapidTemplateTransformer.generate(JapidTemplateTransformer.java:131)
at cn.bran.japid.compiler.TranslateTemplateTask.execute(TranslateTemplateTask.java:141)
at cn.bran.play.JapidCommands.reloadChanged(JapidCommands.java:229)
at cn.bran.play.JapidCommands.reloadChanged(JapidCommands.java:320)
at cn.bran.play.JapidPlugin.beforeDetectingChanges(JapidPlugin.java:86)
at play.plugins.PluginCollection.beforeDetectingChanges(PluginCollection.java:384)
at play.Play.detectChanges(Play.java:560)
at play.Invoker$Invocation.init(Invoker.java:187)
at play.server.PlayHandler$NettyInvocation.init(PlayHandler.java:185)
at play.Invoker$Invocation.run(Invoker.java:263)
at play.server.PlayHandler$NettyInvocation.run(PlayHandler.java:217)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:139)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:206)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:909)
at java.lang.Thread.run(Thread.java:662)
branaway commented 13 years ago

default -> Default

tunggad commented 13 years ago

works fine, confirmed. Thank you!