| |||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
---|---|---|---|---|---|---|---|---|---|
25 | 26 | 27 | 28 | 29 | 30 | 31 | |||
1 | 2 | 3 | 4 | 5 | 6 | 7 | |||
8 | 9 | 10 | 11 | 12 | 13 | 14 | |||
15 | 16 | 17 | 18 | 19 | 20 | 21 | |||
22 | 23 | 24 | 25 | 26 | 27 | 28 | |||
29 | 30 | 1 | 2 | 3 | 4 | 5 |
1。當地址為href="/myRegister/myRegister.do?method=listRegister&&size=10&&&start=5"
?? 可以通過下面方法分別取到size&&start:
????Map?requestMap = request.getParameterMap();
????String ?size = requestMap.get("size");
??? String start =requestMap.get("start");
2。checkbox取相同名字,則表單上得到的是一個數組。
????? <tr>
??????????????<td><input type="checkbox" value="<%=register.getId()%>" id="id"/></td>
???????????????<td><%=register.getName()%></td>
???????????????<td><%=register.getPassword()%></td>
??????????????? </tr>
??? 問題一:表單提交以后,form的對象是什么??
????問題二:如何利用request取到id的值數組??
????問題二的解決方法為將id值用","連成字符串,將字符串傳遞給action以后再進行分解.具體的解決為:(實現批量刪除)
??? delete.jsp:
<%@page import="com.xindeco.core.pagination.PaginationSupport" %>
<%@page import="com.xindeco.myregister.pojo.MyRegisterInfo"%>
<%
?? PaginationSupport support = (PaginationSupport)request.getAttribute("registerList");
? ?List registerList=support.getItems();
??? %>
<script>
function concatValue(obj,delimiter) {//將id用,串成string
?????if(!obj) {
??????? ??return false;
??? ?}
???? if(!obj.length&&obj.checked) {
??????????return obj.value;
??? ?}
??? ?var str='';
??? ?for(var i=0;i<obj.length;i++) {
?????? ??if(obj[i].checked) {
?????? ????? ?str=str+obj[i].value;
?????? ????? ?str=str+delimiter;
?? ? ??? }?
??? ?}
???? if(str.length>0) {
?????? ??return str.substring(0,str.length-1);
??? ?}
???? return str;?????
?}
?function dele(obj)
?{
??? ?var str = concatValue(obj,',');
??? ?location.href('/myRegister/myRegister.do??? method=deleteRegister&&ids='+str);
??}
</script>
<html ><head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
</head>
<body>
??? <form action="/myRegister/myRegister.do?method=listRegister">
??????? <table id="detailTable" width="100%" border="0" >
????????????? <tr>
????????????? <td></td> <td>姓名</td><td>password</td>
????????????? </tr>
?????????? <%
?????????? for(int i=0;i<registerList.size();i++)
?????????? {
?????????????? MyRegisterInfo register= (MyRegisterInfo) registerList.get(i);
?????????? %>
????????????? <tr>
????????????????? <td><input type="checkbox" value="<%=register.getId()%>" id="id"/></td>
????????????????? <td><%=register.getName()%></td>
????????????????? <td><%=register.getPassword()%></td>
????????????????? </tr>
?? <% }%>
?? ????? <tr><td><input type = "button" onclick="dele(document.getElementsByName('id'))" value="刪除"></input></td></tr>
??????? </table>
??? </form>
</body>
</html>
action中的方法:
????? String ids = req.getParameter("ids");
????????? String[] idList = ids.split(",");
????????? if(idList!=null){
????????????? Long[] idLong = new Long[idList.length];
????????????? for (int i = 0; i < idList.length; i++) {
????????????????? idLong[i] = Long.valueOf(idList[i]);
????????????? }
????????? if(service.deleteRegister(idLong)) return mapping.findForward("success");
????????? }
其中deleteRegister的方法體為:
public boolean deleteRegister(Long[] ids)
??? {
?????? MyRegisterDAO dao = (MyRegisterDAO) this.getBaseDAO();
?????? for(int i=0;i<ids.length;i++) {
??????????? dao.remove(MyRegisterInfo.class,ids[i]);
??????? }
??????? return true;
??? }
dao.remove的方體為
?? public void remove(Class clazz, Serializable id) {
??????? getHibernateTemplate().delete(get(clazz, id));
??? }
在這過程中我發現了long和Long的最大差別:Long是serializable類型,并且從string轉化的過程也不同.
?? long simple = Long.ParseLong(str);
?? Long objLong = Long.valueOf(str);
??? 1。action類中的方法:
??????? ??? public ActionForward updateRegister(ActionMapping mapping,ActionForm form,HttpServletRequest req,
????????? HttpServletResponse res)throws Exception{
????????? MyRegisterInfo register = new MyRegisterInfo();
????????? MyRegisterActionForm registerForm = (MyRegisterActionForm) form;
????????? this.beanCopy(register,form);
????????? MyRegisterService service =? (MyRegisterService) this.getBean("myRegisterService");
????????? if (service.updateRegister(register))
????????????? {
????????????? PageInfo page = new PageInfo(req.getParameterMap());
????????????? req.setAttribute("registerList",service.listRegister(page));
????????????? return? mapping.findForward("list-ok");
????????? }
????????
? 2。sevice中的方法體為
??????public boolean updateRegister(MyRegisterInfo myRegisterInfo)
????? ? {
??????? MyRegisterDAO dao = (MyRegisterDAO) this.getBaseDAO();
??????? dao.update(myRegisterInfo);
??????? return true;
??? }??
? 3。dao中的方法體為
????public void update(Object obj) {
??????? getHibernateTemplate().saveOrUpdate(obj);
??? }
?
? 4。因為registerform的類為四個屬性的getter和setter
??????private String name;
????? private String password;
????? private String repassword;
??????private Long id;
???? //一開始因為少了id,從頁面上傳來的form沒有id,調用saveOrUpdate()方法時,hibernate調用的sql語句是insert,而不是update語句,因此頁面上原來的行不僅還在,而且還不斷有新行增加。
?????
?
?
<%@ page contentType="text/html; charset=GBK" %>
<html>
<head>
<script>
???? function checkall(all,one)
{
??? var obj = document.getElementsByName(one);
?? ?
??? if(!obj) return false;
??? if(!obj.length&&all.checked) return obj;
??? for(var i=0;i<obj.length;i++)
??? ?{
??? ??alert(all.checked);
??? ??obj[i].checked=all.checked
??? ??alert(obj[i].checked);
??? ?}
??? return true;
??
}?
???? function checkone(obj)
{
?alert('hello');
?alert(obj.name);
?return false;
}
?</script>
</head>
<body bgcolor="#ffffff">
?<form>
??<input type="checkbox" onclick="return checkone(this)" name="mm"/><br>//有return,無法選擇這個checkbox
??<input type="checkbox" onclick="checkone(this)" name="mm"/><br>//無論是否返回false,都可以選擇這個checkbox
??<input type="checkbox" onclick="checkone(this)" name="mm"/><br>
??????? <input type="checkbox" onclick="checkall(this,'mm')" name="mmAll"/><br>
?? ?
??? </form>
<table border="0">
</table>
</body>
</html>
注意點:
1、雙引號里面只能含單引號
2、只有一個對象時,只能用getElementbyId(當id屬性沒有賦值時,name可以當作id屬性),如果是一個數組對象,就要用getElementsByName.比較下面的文件:
function selectAll(obj,flag) {
?if(!obj) {//對象可以是null,但單個對象沒有length的屬性,所以還要判斷length
??return false;?
?}
?if(!obj.length) {//如果是單個對象,不是對象數組
??obj.checked=true;
??return true;
?}
?for(var i=0;i<obj.length;i++) {
??obj[i].checked=flag;
?}
?return true;?
}
/**
* Test selected one item or not
* @author rainshow
*/
function selectOne(obj) {
?if(!obj) {
??return false;
?}
?if(!obj.length&&obj.checked) {
??return obj;
?}
?var count=0;
?var checkedObj;
?for(var i=0;i<obj.length;i++) {
??if(obj[i].checked) {
???checkedObj=obj[i];
???count++;
??}
?}
?if(count==1) {
??return checkedObj;
?}
?return false;
}
2。<a href="http://localhost:8080/myRegister/myRegister.do?method=listRegister&&size=<%=support.getPageSize()%>&&Page=<%=support.getPreviousIndex()%>">上一頁</a>
注意點:<%變量%>直接放在“”字符串內,不用連接“+<%變量%>+”
錯誤做法:<a href="http://localhost:8080/myRegister/myRegister.do?method=listRegister&&size="+<%=support.getPageSize()%>+"&&Page="+<%=support.getPreviousIndex()%>">上一頁</a>
3.區別頁面的跳轉:
定向到其他頁面
<script>
location.href("http://localhost:8080/new-register.jsp");
</script>
相當與<%response.sendRedirect("http://localhost:8080/new-register.jsp")%>
而windows.open(“http://localhost:8080/new-register.jsp”)則開出另一個窗口