2010-03-23 2 views
1

Я начал использовать netbeans для создания форм для редактирования экземпляров различных классов, которые я сделал в небольшом приложении, которое я пишу. В основном, приложение запускается, исходный набор объектов выбирается из БД и представлен в списке, тогда элемент в списке может быть выбран для редактирования. Когда редактор появляется, у него есть поля формы для многих полей данных в классе.Как я могу создавать классы JPA POJO + формы Netbeans вместе?

Проблема, с которой я сталкиваюсь, заключается в том, что я должен создать контроллер, который отображает каждый элемент данных в правильный элемент формы, и создает чрезмерное количество строк преобразования с малым преобразованием кода для преобразования чисел в строки и установки правильный элемент в выпадающем списке, затем еще один избыточный объем кода для возврата и обновления базового объекта со всеми значениями из формы при нажатии кнопки сохранения.

Мой вопрос: есть ли более прямой способ сделать редактирование формы напрямую модифицировать содержимое экземпляра моего класса? Я хотел бы иметь возможность сопоставить «контроллер» по умолчанию, который я могу настроить, а затем переопределить геттер/сеттер для определенного поля, если это необходимо. В идеале была бы стандартная проверка поля для таких вещей, как номера телефонов, целые числа, поплавки, почтовые индексы и т. Д.

Я не прочь написать это сам, я просто хотел бы увидеть, если он уже вышел там и используйте правильный инструмент для правильной работы.

ответ

1

См. мой ответ на другой вопрос here. (Короче говоря, использование связывания бобы помогло бы немного, я надеюсь)

2

Есть много подходов,

JBoss Seam, например, использует Ant (И ли вы не знаете, NetBeans использует Ant негласно) инструмент под названием hbmtemplate. Это механизм, основанный на шаблонах, в котором можно управлять с помощью шаблона или класса, предоставленного пользователем. Наряду с шаблоном 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> 

Здесь идет код, не все, из СВОБОДНОГО РЫНКА Шаблона view.xhtml.ftl

<#foreach property in pojo.allPropertiesIterator> 
    <#if !c2h.isCollection(property) && !isToOne(property) && property != pojo.versionProperty!> 
     <#include "viewproperty.xhtml.ftl"> 
    </#if> 
</#foreach> 

Я надеюсь, что это может быть полезно вы

Смежные вопросы