- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
不知道有没有人能帮忙。我正在编写一个 Spring MVC/Webflow 网络应用程序,我需要从用户那里收集数据。我有一个反射(reflect)后端模式的表单支持对象(我认为 JAXB 用于生成类)。无论如何,我需要捕获的字段之一是 DOB,它在表单支持对象中是 XMLGregorianCalendar 类型的单个属性
在大多数情况下,表单上的 html 输入字段是一对一映射到表单支持对象中的属性 - 例如:html 输入“surname”映射到表单支持中名为“surname”的 String 属性对象(通过 getter 和 setter)。不错:)
但是日期字段有点不同。在表单支持对象中,它只有一个属性和一对 getter/setter;但在屏幕上我们可能希望将其显示为 3 个单独的字段 - 可能是天的下拉列表、月的下拉列表和年的文本框
无论后端技术如何,每个网络应用程序都必须出现这种类型的问题,我想知道其他人如何处理它。
我有两个想法:
1) 扩展我的表单支持对象,以便我拥有 dobDay、dobMonth 和 dobYear 的属性,然后作为我的验证器的一部分,获取 3 个值并从中设置真正的 DOB 属性。我过去曾这样做过,它有点管用,但感觉有点垃圾,尤其是当网络应用程序有很多日期时。
2) 查找或编写一个 jsp 标签库来为我实现这一神奇效果。我可以在呈现表单时看到这项工作是如何工作的——可以使用 FBO 中的属性名称调用 taglib,它可以获取当前日期值,然后可以写入输出 3 个 html 字段。但是我看不出提交是如何工作的——需要读取 3 个 html 字段并将它们“粘合”到 FBO 的不动产中
所以,真的,这只是一个求助电话 - 过去其他人对这种事情做了什么?
欣赏你的想法
内森
最佳答案
您可以使用任一选项,但我倾向于同意您的看法,即让命令对象包含日期组件并不是很巧妙。
如果您在页面中为日期字段添加一个隐藏字段并使用该值来填充日、月和年的三个组合,则数字 2 将起作用。在提交表单时,您必须首先使用 javascript 重新组合此隐藏字段内组合的值(它将与命令对象中的日期字段映射)。
我认为这是最干净的方法,但如果您不想使用 javascript,您可以提交三个值(在命令对象中没有对应的字段)并在命令绑定(bind)后组装它们。
您没有提及您使用的 Spring 版本,但对于 2.x,您可以干预 workflow在 onBind
方法上重新组合那里的值。
在 Spring 3 中发生了一些变化, Controller 类被弃用,取而代之的是带注释的 Controller ,但如果您使用 InitBinder,您可能会得到类似的结果。结合对 register a custom date editor 的请求并重新组合字段;例如:
命令:
public class TestCommand implements Serializable {
private static final long serialVersionUID = 1L;
private Date someDate;
public Date getSomeDate() {
return someDate;
}
public void setSomeDate(Date someDate) {
this.someDate = someDate;
}
}
Controller :
@Controller
@RequestMapping(value="/testAction")
public class TestController {
@RequestMapping(method=RequestMethod.GET)
public String handleInit() {
return "form";
}
@InitBinder
protected void initBinder(WebDataBinder dataBinder, WebRequest webRequest) {
dataBinder.registerCustomEditor(Date.class, "someDate", new TestPropertyEditor(webRequest));
}
@RequestMapping(method=RequestMethod.POST)
public String handleSubmit(@ModelAttribute("testCommand") TestCommand command, BindingResult result) {
return "formResult";
}
}
表格:
<form:form modelAttribute="testCommand" action="testAction" method="post">
<%-- need a parameter named "someDate" or Spring won't trigger the bind --%>
<input type="hidden" name="someDate" value="to be ignored" />
year: <input type="text" name="year" value="2012" /><br/>
month: <input type="text" name="month" value="5" /><br/>
day: <input type="text" name="day" value="6" /><br/>
<input type="submit" value="submit" />
</form:form>
表单结果:
some date: ${testCommand.someDate}
属性编辑器:
public class TestPropertyEditor extends PropertyEditorSupport {
private WebRequest webRequest;
public TestPropertyEditor(WebRequest webRequest) {
this.webRequest = webRequest;
}
@Override
public void setAsText(String text) throws IllegalArgumentException {
Map<String, String[]> parameterMap = webRequest.getParameterMap();
// should validate these...
Integer year = Integer.valueOf(parameterMap.get("year")[0]);
Integer month = Integer.valueOf(parameterMap.get("month")[0]);
Integer day = Integer.valueOf(parameterMap.get("day")[0]);
try {
String value = String.format("%1$d-%2$d-%3$d", year, month, day);
setValue(new SimpleDateFormat("yyyy-MM-dd").parse(value));
} catch (ParseException ex) {
setValue(null);
}
}
}
关于jsp - 在 Spring Web 应用程序中显示日期字段的策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11903449/
我的数据库中有两张表,一张用于 field ,另一张用于预订。我需要的是一个查询来选择所有未预订的 field 。见下文: 餐 table 预订具有以下字段: bk_id venue_id 作为(预订
嗨,我是编码新手,我有一些培训项目,其中包括从 HTML 表单输入 MySQL 数据库。它就像你玩过的游戏的日志。第一个日期输入是您开始游戏的时间,第二个日期输入是您完成游戏的时间。但我需要检查器或类
我是这个 sql 编码的新手,我正在尝试学习新的东西。因此,我创建了一个交货表,其中包含一些属性,如商品代码、交货日期、交货数量。所以如何从同一张表中获取第一个交货日期(最小日期)和交货数量以及最晚交
我从支付网关返回了这个日期 2014-05-15T08:40:52+01:00 我得到 2014-05-15T08:40:52 但我无法识别时区 +01:00 的含义 我的位置时区是 UTC−06:0
我快要疯了,请帮忙。 我有一列包含日期时间值。 我需要找到每天的最小值和最大值。 数据看起来像这样 2012-11-23 05:49:26.000 2012-11-23 07:55:43.000
我从 json 数据中获取日期为 2015 年 4 月 15 日晚上 10:15我只想在 html 页面中显示 json 响应数据的时间,例如 10:15 PM这里我放了我的js函数和html代码 J
是否有 javascript 库或其他机制允许我将 .NET 日期/时间格式字符串(即 yyyy-MM-dd HH:mm:ss)传递给 javascript函数并让它相应地解析提供的日期时间值?我一直
我正在使用以下代码以正确的格式获取当前的 UTC 时间,但客户返回并要求时间戳现在使用 EST 而不是 UTC。我搜索了 Google 和 stackoverflow,但找不到适用于我现有代码的答案。
我有以下日期的平均温度数据。我想找到连续至少 5 天低于或高于 0 摄氏度的开始日期。 date_short mean.temp 1 2018-05-18 17.54 2 2018-05-19
它可以在其他网络浏览器中使用,但 IE11 返回无效日期。 为了调试我使用了下面的代码。 console.log('before - ' + date.value); date.value = new
我在 Excel 中有一个数据的 Web 提取,其中日期列带有/Date(1388624400000)/。我需要在 Excel 中将其转换为日期。 最佳答案 能够从 here 中推断出它. 假设字符串
嗨,我的 Schmema 有一个带有 ISO 日期的字段: ISODate("2015-04-30T14:47:46.501Z") Paypal 在成功付款后以该形式返回日期对象: Time/Date
我的 table : CREATE TABLE `tbdata` ( `ID` INT(10) NOT NULL AUTO_INCREMENT, `PatientID` INT(10) NOT
我正在 Ubuntu 服务器 12.04 中编写一个 shell 脚本,它应该比较日志文件中的一些数据。在日志文件中,日期以以下格式给出: [Mon Apr 08 15:02:54 2013] 如您所
我想使用 GROUP BY WITH ROLLUP 创建一个表并获取总行数而不是 null。 $sql ="SELECT IF(YEAR(transaktioner.datum
我正在创建博客文章,在成功迁移我的博客文件后,当我转到我网站的博客页面时返回一个错误(无法解析其余部分:':“Ymd”'来自'post.date|date: "Ymd"') 我似乎无法确定这是语法错误
我正在尝试获取要插入到 CAML 查询中的月份范围,即:2010-09-01 和 2010-09-30。 我使用以下代码生成这两个值: var month = "10/2010"; var month
如何将代码document.write("直到指定日期")更改为writeMessage(date)中的日期?此外,writeMessage(date) 中的日期未正确显示(仅显示年份)。感谢您帮助解
我在 Windows (XP) 和 Linux 上都尝试过 utime()。在 Windows 上我得到一个 EACCES 错误,在 Linux 上我没有得到任何错误(但时间没有改变)。我的 utim
我正在尝试计算发生在同一日期的值的总和(在 XYZmin 中)。 我的数据看起来像这样, bar <- structure(list(date = structure(c(15622, 15622,
我是一名优秀的程序员,十分优秀!