使用servlet和JSP验证数字
在学习web开发的同时,我正在开发一个小的servlet&JSP应用程序 我有一个关于jsp和servlet之间的验证和传递值的问题 我有一个“啤酒”类,具有“评级”属性(类型为double) 加载“edit.jsp”的servlet创建一个Beer对象,并从数据库中加载当前值使用servlet和JSP验证数字,jsp,servlets,validation,Jsp,Servlets,Validation,在学习web开发的同时,我正在开发一个小的servlet&JSP应用程序 我有一个关于jsp和servlet之间的验证和传递值的问题 我有一个“啤酒”类,具有“评级”属性(类型为double) 加载“edit.jsp”的servlet创建一个Beer对象,并从数据库中加载当前值 BeerDAO beerdao = new BeerDAO(); Beer beer = beerdao.getBeer(id); request.setAttribute("beer", bee
BeerDAO beerdao = new BeerDAO();
Beer beer = beerdao.getBeer(id);
request.setAttribute("beer", beer);
在JSP中,对象以以下方式显示:
...
<td class="left">Beer Name:</td>
<td><input type="text" name="name" value="${beer.name}"/></td>
...
<td class="left">Rating:</td>
<td><input type="text" name="rating" value="${beer.rating}"/></td>
...
。。。
啤酒名称:
...
评级:
...
现在,当我将表单提交到“更新”servlet时,每个属性都会得到验证。对于“rating”属性,我将其转换为double
如果我在验证中发现错误(即:字母,而不是评级值的数字),我想返回表单,返回用户键入的值和错误消息。问题是,我需要在表单中显示请求中的Beer对象,但我无法将“rating”值传递给它,因为它的类型不正确。所以现在我正在将用户重新植入一个带有空评级的表单
我猜我做错了。那么,验证数字并返回编辑表单的正确方法是什么呢?最基本的方法是在请求范围中有一个
映射,其中键表示字段名,值表示验证错误(如果有)
BeerDAO beerdao = new BeerDAO();
Beer beer = beerdao.getBeer(id);
request.setAttribute("beer", beer);
// ...
Map<String, String> messages = new HashMap<String, String>();
request.setAttribute("messages", messages);
// ...
String rating = request.getParameter("rating");
if (rating == null) {
messages.put("rating", "Please enter rating");
} else if (!rating.matches("\\d+")) {
messages.put("rating", "Please enter numbers only");
} else {
beer.setRating(Integer.valueOf(rating));
}
// ...
谢谢你的解决办法很巧妙。我不知道param object,不客气。有关EL中隐式对象的更多信息,请参见此答案
<input name="rating" value="${empty messages.rating ? beer.rating : param.rating}" />
<span class="error">${messages.rating}</span>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
...
<input name="rating" value="${fn:escapeXml(empty messages.rating ? beer.rating : param.rating)}" />