【问题标题】:Spring MVC update Joda timeSpring MVC 更新 Joda 时间
【发布时间】:2014-10-08 09:00:57
【问题描述】:

我正在尝试更新 Joda DateTime,但它不想正常工作。当我单击“明天的聚会”按钮时,jsp 用明天的第二天日期重新加载我的 jsp,但是当我再次单击按钮时,jsp 不会用新日期重新加载。谁能帮我解决这个问题?

这是我的控制器:

@RequestMapping("/parties")
public String listOfParties(@ModelAttribute("tomorrow") String day, Model model, Principal principal) {
    DateTime today = new DateTime();
    if (day.equalsIgnoreCase("Tomorrow")) {
        today = today.plusDays(1);
    } 
    DateTime date = today;
    model.addAttribute("parties", partyManager.findAllTodayParties());
    model.addAttribute("date", date);
    return "/parties";
}

@RequestMapping(params = "Tomorrow", value = "/parties", method = RequestMethod.POST)
public String nextDay() {   
    return "redirect:/parties";
}

这是我的带有 Spring 表单的 jsp 更新日期:

<form:form action="parties" method="post">
   <input type="hidden" name="tomorrow" value="Tomorrow" />
   <input type="submit" value="Tomorrow's parties" />
</form:form>

【问题讨论】:

  • 删除了之前的评论 - 这就是你想要做的:用户点击明天按钮,你将日期向前移动 7 天并找到当天的各方。那么如果用户再次点击,您希望日期提前两周(从原始日期开始)?如果是这样,为什么要调用'DateTime today = new DateTime();'不会带您回到原来的日期(而不是提前 7 天,您可以再申请几天)
  • 对不起,我编辑了我的代码。必须是 today.plusDays(1)。是的,当用户单击按钮两次时,他无法提前两天移动,如果我添加“昨天”按钮,我也会遇到同样的问题。
  • 您总是以new DateTime() 开头,它始终是当前日期(对于 JVM 的时区)。您必须将开始日期更改为相对于之前确定的日期。
  • 我知道我必须更改开始日期,但我不知道该怎么做。
  • 您需要将日期作为输入传递(而不是将其以某种方式缓存在服务器上,而是将其从客户端发送到服务器,其中日期最终将成为输入。如果没有输入,使用新的 Date 调用(获取当前日期)

标签: java spring spring-mvc time jodatime


【解决方案1】:

当您第一次点击 JSP 中的“明天”按钮时,您会在您的 jsp 上获得明天的日期,这就是您的第一次点击。
一旦您有了明天的日期,然后在下一次单击 POST 这个现有日期再次到您的方法后,然后将此值分配为新日期并将其加一。

其他方法:
您还可以使用计数器并在每次点击时增加计数器,并将此计数器传递给您的方法并将其添加到您的日期中。

即 在你的jsp中为计数器创建一个hiddnen变量,一旦jsp加载,从你的jsp传递这个值作为1。点击你的方法后,再添加一个,明天继续。

【讨论】:

  • 计数器不工作。输入日期始终是当前日期。不知道为什么?
  • 在您的 jsp 中只需添加一个隐藏变量作为计数器并将值设置为第一次 0(您可以从您的方法中将此值设置为不要硬编码为 0),现在单击明天按钮并通过将此值更改为您的方法,然后将此代码 today = today.plusDays(1); 更改为 today = today.plusDays(counter); 并添加一行作为 counter++; 并再次设置此计数器,以便 jsp 页面的值将变为 2 ,
【解决方案2】:

我只想感谢你们真的帮助我!!!我解决了我的问题。这是我的解决方案。

带有Spring形式的JSP:

    <form:form action="parties" method="post">
      <input type="hidden" name="day" value="${date.getDayOfYear()+1)}" />
      <input type="submit" value="Tomorrow's parties" />
    </form:form>

控制器:

   @RequestMapping("/parties")
   public String listOfParties(@ModelAttribute("day") String day, Model model) {

   DateTime date = partyManager.newDay(day);
   model.addAttribute("parties", partyManager.findAllTodayParties());
   model.addAttribute("date", date);
   return "/parties";
   }

   @RequestMapping(value = "/parties", method = RequestMethod.POST)
   public String nextDay() {    
   return "redirect:/parties";
   }

PartyManager 类中的方法 newDay(day):

   public DateTime newDay(String day) {
   int dayNumber = 0;
   if (StringUtils.isEmpty(day)) {  // Check whether the given String is empty
        dayNumber = new DateTime().getDayOfYear();
   } else {
        dayNumber = Integer.parseInt(day); }
   int newDayNumber = dayNumber;
   DateTime newDate = new DateTime().withDayOfYear(newDayNumber);
   return newDate;
}

【讨论】:

    猜你喜欢
    • 2015-02-26
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    • 2018-09-05
    • 2018-06-30
    • 1970-01-01
    • 1970-01-01
    • 2016-11-17
    相关资源
    最近更新 更多