JSTL格式标记

t0m*_*cat 5 jsp jstl

尝试在INPUT文本字段中填充和格式化日期值.我在这做错了什么?

<spring:bind path="salesData.weekEndDate">
 <input type="text" name="${status.expression}"
 value="${fmt:formateDate pattern='MM/mm/YYYY' status.value}"
/>
Run Code Online (Sandbox Code Playgroud)

Bal*_*usC 13

JSTL fmt标签库中存在的<fmt:xxx>标签,而不是${fmt:xxx}功能.

相应修复:

<input type="text" name="${status.expression}"
    value="<fmt:formatDate pattern="MM/dd/yyyy" value="${status.value}" />" />
/>
Run Code Online (Sandbox Code Playgroud)

(请注意,天数应表示为dd,而不是mm年份表示为yyyy,不是YYYY,请参阅SimpleDateFormatjavadoc以了解所有有效模式)

如果您的IDE突然出现嵌套标签(但它应该运行得非常好)或者您从中获取痒,请使用该var属性以便您的HTML/XML最终形成良好.

<fmt:formatDate pattern="MM/dd/yyyy" value="${status.value}" var="statusDate" />
<input type="text" name="${status.expression}" value="${statusDate}" />
Run Code Online (Sandbox Code Playgroud)

如果你真的想要一个${fmt:formatDate()}功能,你必须自己动手.您可以在此答案中找到启动示例.


按照每条评论更新,${status.value}实际上是一种String格式yyyy-MM-dd.如果固定它是一个fullworthy Date是不是一种选择,那么你就需要把它解析为Date第一与帮助<fmt:parseDate>将其送入前<fmt:formatDate>.

<fmt:parseDate pattern="yyyy-MM-dd" value="${status.value}" var="parsedStatusDate" />
<fmt:formatDate pattern="MM/dd/yyyy" value="${parsedStatusDate}" var="formattedStatusDate" />
<input type="text" name="${status.expression}" value="${formattedStatusDate}" />
Run Code Online (Sandbox Code Playgroud)

  • 然后`$ {status.value}`返回`String`而不是`Date`.相应地修复它以便它返回"Date".或者,如果这不是一种选择,由于一些愚蠢的业务限制(?为什么你会永远保存日期为字符串,虽然),然后使用`<FMT:parseDate模式="YYYY-MM-DD"值="$ {status.value } "VAR = "$ {parsedStatusDate}">`转换`String`到`Date`第一,你又馈送到`<FMT:formatDate图案= "MM/DD/YYYY" 值=" $ {parsedStatusDate} "/>`. (2认同)