Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用servlet和JSP验证数字_Jsp_Servlets_Validation - Fatal编程技术网

使用servlet和JSP验证数字

使用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

在学习web开发的同时,我正在开发一个小的servlet&JSP应用程序

我有一个关于jsp和servlet之间的验证和传递值的问题

我有一个“啤酒”类,具有“评级”属性(类型为double)

加载“edit.jsp”的servlet创建一个Beer对象,并从数据库中加载当前值

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)}" />