$("#userId").blur(function() {
$.post("<%=path%>/servlet/DuCheckDoc", {name: $(this).val()}, function(data) {
if (data == "true") $("#msg").text("用戶名已存在").addClass("error");
else $("#msg").text("可註冊").removeClass("error");
});
});
public class DuCheckDoc extends HttpServlet {
protected void doPost(HttpServletRequest req, HttpServletResponse resp) {
String uName = req.getParameter("name");
List list = new UserNameImpl().getUserName(); // 查全表
String msg = "false";
for (User u : list) if (uName.equals(u.getUserId())) { msg = "true"; break; }
resp.getWriter().print(msg);
}
}
改進建議:改用 SELECT COUNT(*) FROM user WHERE id=? 避免全表掃描。
-- 分頁查詢 (SQL Server 語法)
SELECT TOP ? * FROM EASYBUY_USER
WHERE identity_ID NOT IN (SELECT TOP ? identity_ID FROM EASYBUY_USER)
-- 修改
UPDATE EASYBUY_USER SET EU_USER_ID=?, EU_USER_NAME=?, ... WHERE identity_ID=?
-- 刪除
DELETE FROM EASYBUY_USER WHERE identity_ID=?
Page page = new Page();
page.setPageSize(3);
int total = dao.getAllCount();
page.setPageCount(total % 3 == 0 ? total/3 : total/3 + 1);
int pageIndex = req.getParameter("pageIndex") != null ? Integer.parseInt(req.getParameter("pageIndex")) : 1;
page.setList(dao.getAllUser(pageIndex, page.getPageSize()));
req.setAttribute("page", page);
<a href="?opr=list&pageIndex=1">首頁</a>
<a href="?opr=list&pageIndex=${page.pageIndex-1}">上一頁</a>
${page.pageIndex}/${page.pageCount}
<a href="?opr=list&pageIndex=${page.pageIndex+1}">下一頁</a>
<a href="?opr=list&pageIndex=${page.pageCount}">尾頁</a>
EASYBUY_PRODUCT_CATEGORY
EPC_ID, EPC_NAME, EPC_PARENT_ID
-- 一級分類:EPC_ID == EPC_PARENT_ID
-- 二級分類:EPC_PARENT_ID 指向一級 EPC_ID
// 所有一級
SELECT * FROM EASYBUY_PRODUCT_CATEGORY WHERE EPC_ID = EPC_PARENT_ID
// 所有二級
SELECT * FROM EASYBUY_PRODUCT_CATEGORY WHERE EPC_ID != EPC_PARENT_ID
parentId 存入 EPC_PARENT_ID。String opr = req.getParameter("opr");
if ("listinfo".equals(opr)) { /* 分頁查詢並轉發 productClass.jsp */ }
else if ("update".equals(opr)) { /* 載入數據轉發 productClass-modify.jsp */ }
else if ("add".equals(opr)) { /* 載入一級分類轉發 productClass-add.jsp */ }
<c:forEach items="${page.listc}" var="item"> <!-- 一級 -->
<tr><td>${item.id}</td><td>${item.name}</td>...</tr>
<c:forEach items="${levelslist}" var="son"> <!-- 二級 -->
<c:when test="${item.id == son.parentId}">
<tr><td class="childClass">${son.name}</td>...</tr>
</c:when>
</c:forEach>
</c:forEach>
<select name="parentId">
<c:forEach items="${levellist}" var="item">
<option value="${item.id}" ${item.id == rid ? 'selected' : ''}>${item.name}</option>
</c:forEach>
</select>
PreparedStatement 防注入(代碼中已用 ? 佔位符)。UserServlet、CategoryServlet 等。Page 可泛型化,復用性更強。printStackTrace() 洩露堆疊。