Zdravím. Podařilo se mi konečně najít uspokojivé řešení toho, jak dostat data z databáze na formulář a zpět, bez nutnosti psát tuny kódy, tak se zde o ně podělím, abych se pořád jen neptal. Někomu možná pomůžu a někdo možná znáte způsob, jak to ještě vylepšit.
Používám JPA (Java Persistance API), pak JGoodies Binding. Poslední problém, který jsem měl bylo, že Binding vyžaduje aby získaná Entita (Java bean) měla tzv. "Bounded properties", tedy aby byla schopna oznamovat změnu svého stavu případným zájemcům, tedy aby byla "Observable". Řešení tohoto problému jsem našel zde: 1.) http://www.damnhandy.com/?page_id=17 2.) https://izvin.bountysource.com/ - Better bound properties management Dvojka je podle mě lepší, protože potřebná knihovna má jen 200kB, na rozdíl od prvního řešení, kde má knihovna 2,4MB. První řešení zase ale umožňuje elegantní řešení pomoci anotací. Druhé vyžaduje doplnit do kódu volní jedné metody navíc. Celé to pak vypadá takto (zkrácený kód): //získání objektu zákazníka nebo vytvoření nového //em je instance EntityManageru if (...) customer = new Customers(); else customer = (Customers)em.createNamedQuery("Customers.findById").setParameter("id",buyer_id).getSingleResult(); // vytvoření provázání na formulář // zde je ten kritický krok, kdy je potřeba pomoci UIBeanEnhancer.enhance() modifikovat získaný Bean, taky aby byl Observable customerPresentationModel = new PresentationModel(UIBeanEnhancer.enhance(customer)); // nyní se namapují jednotlivé prvky formuláře: // tohle by šlo krásně vygenerovat automaticky pomoci Jackpot projektu v Netbeans, když se dodrží určité konvence pro pojmenování Bindings.bind(itemc_bname,customerPresentationModel.getModel(Customers.ITEM_BNAME)); Bindings.bind(itemc_city,customerPresentationModel.getModel(Customers.ITEM_CITY)); Bindings.bind(itemc_ico,customerPresentationModel.getModel(Customers.ITEM_ICO)); Bindings.bind(itemc_dic,customerPresentationModel.getModel(Customers.ITEM_DIC)); Bindings.bind(itemc_email,customerPresentationModel.getModel(Customers.ITEM_EMAIL)); ... // no a nakonec je třeba zajistit, že když uživatel formulář zavře nebo klikne na Uložit, vrátí se data zpět to DB: EntityManagerUtil.persist(customer,em); em.close(); // EntityManagerUtil.persist je můj výmysl, abych nemusel moc psát: public static void persist(Object obj,EntityManager em) { try { em.getTransaction().begin(); em.persist(obj); em.getTransaction().commit(); } catch (Exception e) { em.getTransaction().rollback(); em.close(); throw new UnexpectedError(e); } } To je vše. Dík za vaše názory ;-) Datum: 10:03:31 27. září 2006 -- --------------------------------------------------------------------- Tomáš Procházka E-mail: [EMAIL PROTECTED] WWW: http://atom.sf.cz ICQ: 87147320 ---------------------------------------------------------------------
