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);
posted @
2006-04-15 15:34 aimy 阅读(139) |
评论 (0) |
编辑 收藏
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语句,因此页面上原来的行不仅还在,而且还不断有新行增加。
posted @
2006-04-14 16:16 aimy 阅读(223) |
评论 (0) |
编辑 收藏
<%@ 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”)则开出另一个窗口
posted @
2006-04-13 12:52 aimy 阅读(3657) |
评论 (2) |
编辑 收藏