Как сделать fmt: formatDate работать для формы: ввод
У меня есть цикл jstl, и я хочу отформатировать дату формы: input. Я пробовал много перестановок некоторых предложений, которые мне нравятся в Интернете, но я просто не могу заставить его работать. Может кто-нибудь, пожалуйста, посмотрите?
Я включил полный цикл для контекста, но проблема заключается в последнем блоке <td></td>
.
<c:forEach items="${valueTransactionsModel.transactions}" var="transaction" varStatus="loopStatus">
<tr class="${loopStatus.index % 2 == 0 ? 'even' : 'odd'}">
<spring:message code="valueTransactions.transactionType" var="transactionTypeLbl" />
<tags:dropdown id="transactionTypeId${loopStatus.index}" path="transactions['${loopStatus.index}'].valueTransactionType.id"
fieldName="${transactionTypeLbl}" classStyle="mandatory" items="${transactionTypes}" itemLabel="value"/>
</tr>
<tr class="${loopStatus.index % 2 == 0 ? 'even' : 'odd'}">
<spring:message code="valueTransactions.transactionAmount" var="valueTransactionAmountLbl${loopStatus.index}" />
<tags:input id="transactionAmountId${loopStatus.index}"
path="transactions['${loopStatus.index}'].valueTransactionAmount"
fieldName="valueTransactionAmountLbl${loopStatus.index}"
maxlength="30" classStyle="mandatory" />
<spring:message code="valueTransactions.transactionDate"
var="valueTransactionDateLbl${loopStatus.index}" />
<td>
<form:input type="text" path="transactions['${loopStatus.index}'].valueTransactionDate" cssClass="mandatory" value="<fmt:formatDate value="transactions['${loopStatus.index}'].valueTransactionDate" type="date" pattern="yyyy-MM-dd"/>" />
</td>
</tr>
</c:forEach>
Моя последняя проблема:
JSPG0055E: невозможно создать атрибут xml из имени [transaction [] value [$ {loopStatus.index}]
Ответы
Ответ 1
Вы не можете использовать тег JSP в атрибуте другого тега JSP. Сохраните результат форматирования даты в атрибуте страницы и используйте этот атрибут страницы (как и для переменной на Java):
<fmt:formatDate value="transactions['${loopStatus.index}'].valueTransactionDate"
type="date"
pattern="yyyy-MM-dd"
var="theFormattedDate" />
<form:input type="text" path="..." value="${theFormattedDate}"/>
Ответ 2
В последних выпусках тегов spring JSTL вы не можете использовать значение атрибута в форме tah: input. Если вы попытаетесь, вы получите сообщение об ошибке value attribute is not valid for tag <form:input>
.
В этом случае вы должны использовать обычный тег ввода HTML и поместить путь как имя ввода, чтобы вызвать привязку к форме spring, подобной этой
<fmt:formatDate var="fmtDate" value="${form.bean.dateProperty}" pattern="dd/MM/yyyy"/>
<input type="text" name="bean.dateProperty" value="${fmtDate}"/>
Уродливый, но работает для меня!;)