我一直发现很难理解我哪里出错了。我知道我们应该与时俱进,但我不确定如何使用 JSTL 标记库函数替换我可以完成这项工作的 scriptlet。
我有一个名为 Ranges.class 的模型类,它包含一个 rangeName (String) 和一个 startRange (BigDecimal) 以及一个 endRange (BigDecimal) 值。我有一个处理所有数据库查询(crud 类型方法)的 DAO 类。我在 RangesDao.class 中有一个名为 getAllRanges() 的方法,它将从 mysql 数据库中获取所有潜在范围并返回一个列表。这将获取包括 rangeName、startRange 和 endRange 在内的所有 Range 对象。
问: 所以基本上我想做的是从我的 jsp 页面选择文本输入时,我想检查它是否在每个 Range 对象(在 List 中返回)的开始值和结束值之间,并且当我有一个匹配我想用该对象的 rangeName 值更新不同的文本输入。
这就是我到目前为止所拥有的。
范围类
package za.co.zs6erb.model;
import java.math.BigDecimal;
public class Range {
private int range_id;
private String rangeName;
private BigDecimal startRange;
private BigDecimal endRange;
//...getters and setters for each of the above variables ...
@Override
public String toString() {
return "Ranges [range_id=" + range_id + ", Range Name=" + rangeName + ", Start Range=" + startRange
+ ", End Range=" + endRangeBand + "]";
}
}
DAO 类:这是 getAllRanges() 方法
public List<Range> getAllRanges() {
List<Range> rangeList = new ArrayList<Range>();
try {
Statement statement = connection.createStatement();
ResultSet rs = statement.executeQuery("select * from ranges order by range_id");
while (rs.next()) {
Range lRange = new Range();
lRange.setID(rs.getInt("range_id"));
lRange.setRangeName(rs.getString("rangeName"));
lRange.setStartRange(rs.getBigDecimal("start_range"));
lRange.setEndRange(rs.getBigDecimal("end_range"));
rangeList.add(lRange);
}
} catch (SQLException e) {
e.printStackTrace();
}
return rangeList;
}
控制器: 这个类有一个 doGet() 和一个 doPost() 方法,我正忙于 doGet()。doPost() 在添加“plannedRoute”对象时使用(只是一个具有需要添加到不同表的其他几个属性的对象。-这里不是问题)从 doGet() 我列出了所有“plannedRoute”每个对象都有一个 Range 关联。添加新路由时,我从 doGet() 方法启动 jsp 页面。下面的部分应该让事情变得更清楚一些。
获取():
private static String LIST_PLANNEDROUTES = "plannedroutes.jsp";
private RangeDao rDao;
//Constructor
public PlannedRouteController() {
super();
rDao = new RangeDao();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String forward = "";
String action = request.getParameter("action");
if (action.equalsIgnoreCase("new")) {
forward = LIST_PLANNEDROUTES;
request.setAttribute("rd", rDao);
}
RequestDispatcher view = request.getRequestDispatcher(forward);
view.forward(request, response);
}
所以现在我们找到了问题的症结所在…… plannedRoutes.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>MyTest</title>
<script src="sj/jquery.js"></script>
<script type="text/javascript">
//<!--
$(document).ready(function(){
$("#range").change(function() {
alert("A Range was entered");
<c:forEach var="entry" items="${rd}">
alert( "HERE>" + ${entry.rangeName});
</c:forEach>
document.getElementById("testName").value = $("#range").val();
});
});
//-->
</script>
</HEAD>
<BODY>
<form method="POST" action='<form method="POST" action='ContactController' name="frmAddContact">' name="frmAddRoute">
Range: <input type="text" id="range" name="range" />
Name: <input type="text" id="testName" name="testName" readonly />
<!-- a whole bunch of other stuff here -->
</form>
</BODY>
</HTML>
问:所以当范围输入文本字段中的值发生变化时(我调用标签中的方法,在那里我想单步执行列表并匹配输入的内容,看看它是否落在任何一个的开始和结束范围之间范围对象。当我找到匹配项时,我希望能够获取该对象的 rangeName 属性并将其添加到 testName 输入文本区域。
我希望这足够清楚。我已经尝试过但没有成功,并且不确定在不使用 scriptlets 的情况下从这里去哪里......任何帮助将不胜感激。
亲切的问候肖恩