我在网上和stackoverflow中做了一些搜索,看看如何处理我在其中一个屏幕上显示的以下消息:
无法转换属性值 输入必需的[java.lang.String] 输入属性的[java.lang.Long] 'qtyToShip';嵌套异常是 java.lang.IllegalArgumentException异常: 无法解析数字:无法解析 号码:“a”
从研究和网络上看,我假设将以下内容添加到我的errors.properties文件中会产生预期的结果:
typeMismatch.shippingCommand.qtyToShip=1. Invalid value for Qty To Ship, accepts only numbers.
typeMismatch.qtyToShip=2. Invalid value for Qty To Ship, accepts only numbers.
shippingCommand.qtyToShip=3. Invalid value for Qty To Ship, accepts only numbers.
qtyToShip=4. Invalid value for Qty To Ship, accepts only numbers.
typeMismatch.java.lang.NumberFormatException=5. Invalid value for {0}, accepts only numbers.
typeMismatch.java.lang.Integer=Must specify an integer value.
typeMismatch.java.lang.Long=Must specify an integer value.
typeMismatch.java.lang.Float=Must specify a decimal value.
typeMismatch.java.lang.Double=Must specify a decimal value.
typeMismatch.int=Invalid number entered
typeMismatch=Invalid type entered
我在消息中添加整数值,以确定显示哪一个。
现在我的JSP顶部有以下内容:
<center>
<spring:hasBindErrors name="shippingCommand">
<c:if test="${errors.errorCount > 0 }">
<h4>Following errors need to be corrected:</h4>
<font color="red">
<c:forEach items="${errors.allErrors}" var="error">
<spring:message code="${error.code}" arguments="${err.arguments}" text="${error.defaultMessage}"/><br />
</c:forEach>
</font>
</c:if>
</spring:hasBindErrors>
</center>
以上是在我的表格之外,在我的表格中我有以下(测试理想)
结果是,当我运行我的代码来触发错误时,我看到在我的表单中我得到以下消息:
1. Invalid value for Qty To Ship, accepts only numbers.
由此产生:typeMismatch.shippingCommand.qtyToShip
表单外部显示:
Invalid type entered
我不明白为什么我能在表格中显示正确的信息但不在外面?
在控制器中我添加了以下内容:
@Override
protected void initBinder(HttpServletRequest pRequest, ServletRequestDataBinder pBinder) throws Exception
{
NumberFormat numberFormat = NumberFormat.getInstance();
pBinder.registerCustomEditor(Long.class, "qtyToShip", new CustomNumberEditor(Long.class, numberFormat, false));
}
由于
答案 0 :(得分:6)
或许error.code
不保证返回最具体的消息代码。尝试将错误消息作为一个整体传递:
<spring:message message = "${error}" />