Как сделать так, чтобы классы JPA POJO + формы Netbeans хорошо играли вместе? - PullRequest
1 голос
/ 23 марта 2010

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 25 марта 2010

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

JBoss Seam , например, использует Ant (и, если вы не знаете, NetBeans использует Ant за кулисами), называется hbmtemplate . Это механизм на основе шаблонов, в котором можно управлять предоставленным пользователем шаблоном или классом. Вместе с шаблоном Freemarker (расширение .flt) он генерирует все приложение. Если вы хотите увидеть, как Seam генерирует свои приложения, взгляните на / 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 view.xhtml.ftl

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

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

1 голос
/ 26 марта 2010

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

...