首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >百里香和sql.Date

百里香和sql.Date
EN

Stack Overflow用户
提问于 2015-09-08 09:49:59
回答 1查看 1.7K关注 0票数 2

我的实体中有sql.Date和sql.Time字段,并希望使用文本输入编辑它们的值。

实体中的声明

代码语言:javascript
复制
@DateTimeFormat (pattern="HH:mm")
private Time time;

@DateTimeFormat (pattern="yyyy-MM-dd")
private Date date;

模板

代码语言:javascript
复制
<input id="date" name="date" type="text" th:value="*{{date}}" required="required" />
<input id="time" name="time" type="text" th:value="*{{time}}" />

这对于显示值很有效,但是当表单发布时,控制器中的时间和日期值都为空。有没有办法做到这一点呢?

源代码

代码语言:javascript
复制
import java.sql.Date;
import java.util.Calendar;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import murderstats.web.domain.FormHDetails;


@Controller
@RequestMapping(value = "/formh")
public class FormHController {

    @RequestMapping(value = "/test", method = RequestMethod.GET)
    public String test(@ModelAttribute("detailsItem") FormHDetails detailsItem) {
        detailsItem.setDate(new Date(Calendar.getInstance().getTime().getTime()));
        return "/formh/test";
    }

    @RequestMapping(value = "/test" , params={"save"})
    public String test_save(@ModelAttribute("detailsItem") FormHDetails detailsItem,
                                final BindingResult bindingResult) {        
        // detailsItem.date is null here
        return "redirect:/formh";
    }
}
代码语言:javascript
复制
import java.sql.Date;

import org.springframework.format.annotation.DateTimeFormat;

public class FormHDetails {

    @DateTimeFormat (pattern="yyyy-MM-dd")
    private Date date;
}
代码语言:javascript
复制
<form action="#" th:action="@{/formh/test}" method="post" th:object="${detailsItem}">
    <div>
        <label for="date">Date</label>
        <input id="date" name="date" type="text" th:field="*{date}" required="required" />
    </div>
    <button type="submit" name="save">Save</button>
</form>
EN

Stack Overflow用户

发布于 2015-09-08 17:28:33

几件事..。基本上,您的控制器没有正确地将对象传递给控制器,并且它没有接收到他所期望的...:

代码语言:javascript
复制
// GET Method 
@RequestMapping(value={"/test"}, method = RequestMethod.GET)
public String getFormH(Model model){
FormHDetails detailsItem = new FormHDetails(); // or whatever constructor you use...

detailsItem.setDate(new DateTime().toDate); // import and use Joda Time is simpler...
    model.addAttribute("itemAttribute", detailsItem);

    return "/formh/test";
}

接下来,您需要在控制器中定义POST方法。您可以通过将请求映射中的方法更改为POST来完成此操作,并且需要告诉控制器您希望form以对象FormHDetails的形式提供信息:

代码语言:javascript
复制
@RequestMapping(value={"/test"}, method = RequestMethod.POST)
public postFormH(@ModelAttribute("itemAttribute") FormHDetails detailsItem, final BindingResult bindingResult) {
// check if the form is properly sent?    
if(bindingResult.hasErrors(){
   return "formh/test";
}
// If everything went fine, print the date and redirect me
System.out.println(detailsItem.date);
return "redirect:/formh";
}

好了,现在你应该有了可以正常工作的控制器来处理GET和POST请求。

现在,在您的视图中,只需更改th:对象来处理控制器发送的内容:

代码语言:javascript
复制
th:object="${itemAttribute}"

这应该行得通。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32448114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档