[Struts] Map object to dynaform

Pagina: 1
Acties:

  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

Topicstarter
Op welke manier kan een Date field het makkelijkst gemapt worden met een String-form field?

Bijvoorbeeld volgende situatie:
Java:
1
2
3
<form-bean name="userForm" type="org.apache.struts.validator.DynaValidatorForm">
      <form-property name="user" type="com.domein.vo.User"/>
</form-bean>


De UserClass bevat volgende fields:
Java:
1
2
3
4
5
6
  private Long id;
  private String firstName;
  private String lastName;
  private Date birthDate;
  private Address homeAddress;
  private String telephoneNumber;


In mijn action class kan ik dan ook mooi, volgende doen:
Java:
1
    userForm.set("user", user);


Maar deze aanpak heeft als nadeel dat er een BeanUtils.populate() ServletException wordt geworpen omdat de String (in de form) birthDate natuurlijk niet gemapt kan worden aan het UserObject met als type van birthDate Date.
Verder is deze aanpak natuurlijk ook heel clean omdat je mooi met je objecten kan werken.
Een werkende manier zou de volgende kunnen zijn:
Java:
1
2
3
4
5
6
      userForm.set("id", user.getId().toString());
      userForm.set("firstName", user.getFirstName());
      userForm.set("lastName", user.getLastName());
      userForm.set("homeAddress", user.getHomeAddress());
      userForm.set("birthDate", user.getBirthDate());
      userForm.set("telephoneNumber", user.getTelephoneNumber());

maar het is niet echt een 'mooie' manier, vind ikzelf.. bij aanpassingen moet je dan ook weer deze overal gaan doorvoeren; en dat kan toch niet de bedoeling zijn.

Er is natuurlijk nog een mogelijkheid om elk field apart te gaan mappen met de form; maar ik vind deze manier nogal omslachtig. Is er geen manier of workaround om je form-fields toch gewoon naar je object te mappen op de juiste manier?

Verwijderd

ik heb dat ook niet op een mooie manier voor elkaar gekregen, maar wat ik heb gedaan als "oplossing" is de datum string uit het form zo te formatten en laten valideren, dat ik 'm direct in de database kan proppen
en een string-naar-date (en omgekeerd) parse functie in de bean inbouwen zodat ik wel een Date object tevoorschijn kan toveren als dat moet. ('t zou mooier zijn als die in een aparte util class zat maar ik ben lui ;))

edit:
idee, niet geprobeerd...
je zou 2 getters en setters kunnen maken setDate(String) en setDate(Date)
zo ook voor de getters in je bean, maar geen idee of dat gaat werken

[ Voor 25% gewijzigd door Verwijderd op 02-02-2005 22:05 ]


  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

Topicstarter
Verwijderd schreef op woensdag 02 februari 2005 @ 21:53:
ik heb dat ook niet op een mooie manier voor elkaar gekregen, maar wat ik heb gedaan als "oplossing" is de datum string uit het form zo te formatten en laten valideren, dat ik 'm direct in de database kan proppen
en een string-naar-date (en omgekeerd) parse functie in de bean inbouwen zodat ik wel een Date object tevoorschijn kan toveren als dat moet. ('t zou mooier zijn als die in een aparte util class zat maar ik ben lui ;))

edit:
idee, niet geprobeerd...
je zou 2 getters en setters kunnen maken setDate(String) en setDate(Date)
zo ook voor de getters in je bean, maar geen idee of dat gaat werken
Op welk niveau heb je die formattering dan uitgevoerd? Met een zelfgeschreven Form-object zie ik dit wel mogelijk, maar met een DynaActionFrom is dit nog iets moeilijker. Dat is idd een mogelijke oplossing, maar dan moet je voor ieder niet-String object zo'n ombouw-functie gaan schrijven. Maar dat vind ik toch al een betere oplossing dan voor ieder field de koppeling hardcoded te gaan doen.

  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

Topicstarter
Kan je misschien ook even een stukje code posten op welke manier jij je Strings dan naar Date objecten omzet?

Verwijderd

ik heb vals gespeelt met de string die uit het HTML-form komt, die wordt door een javascript gemaakt (zie struts-layout taglib, daar zit een mooi datum invoer script in)

valideren doe ik met de struts validator

en omzetten van een string naar date en terug:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Dateparse {
public static void main(String[] args){
    SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
    System.out.println("de datum van vandaag is :" + sdf.format(new Date()));
    try {
        sdf.parse(args[0]);
        System.out.println("parsen gelukt!");
    } catch ( ParseException e ) {
        System.out.println("parsen niet gelukt, want :" + e.getMessage());
    }
}
}