2012-05-29 8 views
7

Pracuję w projekcie grails. Korzystam z siatki kendo w mojej aplikacji. potrzebuję utworzyć klasy domeny o nazwie "StatTimings", która zawiera dwa timeTime StartTime i EndTime. Nie mogę użyć typu danych "Data" dla tych dwóch zmiennych, których format czasu, jaki potrzebuję to hh: mm. Nie chcę instalować żadnej wtyczki do tego. to moja domena teraz:Pole czasowe W domenie domeny grails

class StatTimings{ 

???? startTime 
???? endTime 
Date date 
AutoPosting autoPosting 
Status status 

static constraints = { 
} 

enum Status{ACTIVE,INACTIVE} 
enum AutoPosting{SERVICE_CHARGE,STAT_CHARGES,BOTH} 

}

Czy jest jakiś sposób mogę uczynić moje pole, aby zaakceptować tylko raz?

Odpowiedz

1

klasy podklasy java.sql.Time java.util.Date a to sprawia, że ​​prawie to samo i to dodaje niestandardową implementację toString jak poniżej:

public String toString() { 

    int hour = super.getHours(); 
    int minute = super.getMinutes(); 
    int second = super.getSeconds(); 
    String hourString; 
    String minuteString; 
    String secondString; 

    if (hour < 10) { 
     hourString = "0" + hour; 
    } else {   
     hourString = Integer.toString(hour); 
    } 
    if (minute < 10) { 
     minuteString = "0" + minute; 
    } else {   
     minuteString = Integer.toString(minute); 
    } 
    if (second < 10) { 
     secondString = "0" + second; 
    } else {   
     secondString = Integer.toString(second); 
    } 
    return (hourString + ":" + minuteString + ":" + secondString); 
} 

Więc myślę, że można dodać dynamicznie Metoda klasy Date na bootstrap i wywołaj go, gdy jest to konieczne.

Możesz zobaczyć kompletne źródło here.

2

Możesz użyć Data i przekonwertować ją w metodzie getStartTime() na wymagany format przy pomocy SimpleDateFormat. W ten sposób zignorujesz część daty.

class StatTimings { 
    ... 

    def getStartTime() { 
     return new SimpleDateFormat("hh:mm").format(this.startTime); 
    } 

} 
3

Aby ułatwić utrzymują i bind (z HTTP params) wystąpień tej klasy, którą reprezentuję za każdym razem jako dwóch pól całkowitą i dodać niektóre metody pomocnika jak getStartTime() i getEndTime(). Możesz chcieć zmienić tych pomocników, aby zamiast zamiast na String (z częścią dnia ustawioną na dzisiaj), musisz zrobić coś takiego, jak obliczenie różnicy między czasem rozpoczęcia i zakończenia.

class StatTimings { 

    static transients = ['startTime', 'endTime'] 

    Integer startHours 
    Integer startMins 

    Integer endHours 
    Integer endMins 

    private String formatTime(Integer hours, Integer mins) { 
    String formattedHours = hours < 10 ? "0$hours" : hours.toString() 
    String formattedMins = mins < 10 ? "0$mins" : mins.toString() 
    "$formattedHours:$formattedMins" 
    } 

    String getStartTime() { 
    formatTime(startHours, startMins)   
    } 

    String getEndTime() { 
    formatTime(endHours, endMins) 
    } 

    static constraints = { 
    startHours range: 0..23 
    endHours range: 0..23 

    startMins range: 0..59 
    endMins range: 0..59 

    // TODO: add a custom validator that checks the end time is after start time 
    } 
} 
Powiązane problemy