我开始使用netbeans设计表单来编辑我在我正在编写的小应用程序中创建的各种类的实例。基本上,应用程序启动,从数据库中选择一组初始对象并显示在列表中,然后可以选择列表中的项目进行编辑。当编辑器出现时,它具有该类中许多数据字段的表单字段。
我遇到的问题是我必须创建一个控制器,将每个数据元素映射到正确的表单元素,并创建过多的小转换映射代码行,将数字转换为字符串并设置正确下拉列表中的元素,然后是另一个过多的代码,当单击保存按钮时,返回并使用表单中的所有值更新基础对象。
我的问题是;是否有更直接的方式使表单的编辑直接修改我的类实例的内容?我希望能够有一个我可以配置的默认映射“控制器”,然后根据需要覆盖特定字段的getter / setter。理想情况下,会对电话号码,整数,浮点数,邮政编码等进行标准的现场验证......
我不反对自己写这篇文章,我只想知道它是否已经存在并使用正确的工具来完成正确的工作。
答案 0 :(得分:2)
有很多方法,
例如,JBoss Seam使用一个名为hbmtemplate的Ant(而且你不知道,NetBeans是否在幕后使用Ant)工具。它是基于模板的引擎,可以由用户提供的模板或类控制。与Freemarker模板(.flt扩展名)一起,它生成所有应用程序。如果您想了解Seam如何生成其应用程序,请查看< SEAM_HOME> / seam-gen / view。在那里,你可以看到很多Freemarker模板。
以下是Seam如何生成其应用程序
<hibernate templatepath="${templates.dir}">
<jpaconfiguration persistenceunit="${project.name}"/>
<classpath>
<dirset dir="${project.home}/exploded-archives">
<include name="*.war/WEB-INF/classes" if="project.war"/>
<include name="*.war/WEB-INF/dev" if="project.war"/>
<include name="*.jar" if="project.ear"/>
</dirset>
</classpath>
<property key="hibernatetool.util.toolclass" value="org.jboss.seam.tool.Util"/>
<hbmtemplate filepattern="{class-name}List.xhtml" template="view/list.xhtml.ftl" destdir="${project.home}/view" foreach="entity"/>
<hbmtemplate filepattern="{class-name}.xhtml" template="view/view.xhtml.ftl" destdir="${project.home}/view" foreach="entity"/>
<hbmtemplate filepattern="{class-name}.page.xml" template="view/view.page.xml.ftl" destdir="${project.home}/view" foreach="entity"/>
<hbmtemplate filepattern="{class-name}Edit.xhtml" template="view/edit.xhtml.ftl" destdir="${project.home}/view" foreach="entity"/>
<hbmtemplate filepattern="{class-name}Edit.page.xml" template="view/edit.page.xml.ftl" destdir="${project.home}/view" foreach="entity"/>
<hbmtemplate filepattern="${action.dir}/{class-name}List.java" template="src/EntityList.java.ftl" destdir="${project.home}/src" foreach="entity">
<property key="actionPackage" value="${action.package}"/>
</hbmtemplate>
<hbmtemplate filepattern="{class-name}List.page.xml" template="view/list.page.xml.ftl" destdir="${project.home}/view" foreach="entity"/>
<hbmtemplate filepattern="${action.dir}/{class-name}Home.java" template="src/EntityHome.java.ftl" destdir="${project.home}/src" foreach="entity">
<property key="actionPackage" value="${action.package}"/>
</hbmtemplate>
<hbmtemplate filepattern="menu.xhtml" template="view/layout/menu.xhtml.ftl" destdir="${project.home}/view/layout" foreach="entity"/>
</hibernate>
来自FreeMarket Template view.xhtml.ftl的部分代码,而不是全部
<#foreach property in pojo.allPropertiesIterator>
<#if !c2h.isCollection(property) && !isToOne(property) && property != pojo.versionProperty!>
<#include "viewproperty.xhtml.ftl">
</#if>
</#foreach>
我希望它对你有用
答案 1 :(得分:1)
请参阅我对您的其他问题here的回答。 (简而言之:使用bean绑定会对我有所帮助)