开发者

How do I control the formatting of dates in a URL with Play?

开发者 https://www.devze.com 2023-02-05 16:54 出处:网络
I have a Play application that should list out purchases within a give开发者_运维知识库n date interval. If the user does not give any date interval, it should default to showing purchases within the l

I have a Play application that should list out purchases within a give开发者_运维知识库n date interval. If the user does not give any date interval, it should default to showing purchases within the last year. This is done with these two methods in my controller:

public static void show(String id) {
    Date today = new Date();
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(today);
    calendar.add(Calendar.YEAR, -1);
    Date oneYearAgo = calendar.getTime();

    showWithInterval(id, oneYearAgo, today);
}

public static void showWithInterval(String id, Date fromDate, Date toDate) {
    List<Purchase> purchases= Purchase.find(id, fromDate, toDate);

    render(purchases, fromDate, toDate);
}

However, this produces a url looking like this: http://localhost:9000/purchases/showwithinterval/10076430719?fromDate=ISO8601:2010-01-17T19:41:20%2B0100&toDate=ISO8601:2011-01-17T19:41:20%2B0100

This does not adhere to the date format I have specified with the date.format property in application.conf. This format is simply not usable, as I want to be able to print the dates (using ${params.fromDate}) and let my users edit them to show other intervals. I cannot format them in the view, since they are strings.

Does anyone know how to fix this?

Edit: Fixed a typo


Add fromDate et toDate to your render method :

render(purchases,fromDate,toDate);

and format them :

${fromDate.format()}

Play will format the date with your format configuration in application.conf


there are several ways to influence the format of date parametes in URLS.

  1. play.data.binding.As Annotation

    since Play 1.1 you can influence the route and data binding with this annotation. Simply add an @As annotation as follows to your date parameter:

    public static void submit(@As("dd/MM/yyyy")Date myDate)
    {
        Logger.info("date %s", new SimpleDateFormat("dd-MM-yyyy").format(myDate));  
    }
    

    more information about the annotation can be found here http://www.playframework.org/documentation/1.1/releasenotes-1.1

  2. application.conf
    take a look at the i18n/DateFormat section

0

精彩评论

暂无评论...
验证码 换一张
取 消