我正在尝试为使用FreeMarker的JSF Web项目创建源代码生成器。该项目仍处于起步阶段,源代码可在https://github.com/TarekSaid/awesome/tree/master/Awesome处获得。在这个问题的最后,我也包含了一些UML图。如何使用FreeMarker以编程方式创建JSF视图?
生成器解析一个json字符串以创建不同的组件(pom.xml,web.xml,controllers和views)。
到目前为止,我已经能够产生两种类型的JSF项目:
显示的Hello,World- 一个简单的JSF项目!
- a“Hello,[NAME]”JSF项目的表单接收名称并将其重定向到另一个视图。
但我有意见问题。虽然当前的实现非常灵活(在ViewContent上使用某种装饰模式)并且可行,但json字符串必须包含整个页面。对于简单的页面,例如我生成的页面,没关系。但是,随着我试图产生的项目变得越来越复杂,观点也越来越复杂。
举例来说,这是JSON字符串我有一个简单的“Hello World”应用程序:
{
"name":"simplehello",
"pomFile": {"groupId":"br.com.revo", "artifactId":"simplehello", "description":"the simplest JSF Project", "javaVersion":"1.7"},
"beans":[
{"name":"Hello", "scope":"VIEW", "fields":[{"type":"String", "name":"hello", "value":"\"Hello World!\""}]}
],
"views":[
{"name":"hello", "welcomeFile":true, "content":
{"name":"html","properties":{"xmlns":"http://www.w3.org/1999/xhtml","xmlns:h":"http://java.sun.com/jsf/html"},
"contents":[
{"name":"h:head","contents":[{"name":"title","value":"Simple Hello"}]},
{"name":"h:body", "value":"#{helloBean.hello}"}
]}
}
]
}
所以我能做些什么来使用我的JSON字符串的自定义DSL并让发电机处理视图创作?我一直在使用Google周围,这是我见过的可能性:
使用的FreeMarker的
<#include>
插入我需要的JSF组件:<#if content.text> <#include text.ftl> <#elseif content.form> <#include form.ftl> // etc... </#if>
生成一个bean是编程设计的网页。
我怎样才能有效地使用FreeMarker的创建视图?
这里的用例,为我的项目类别和活动图: