struts+javascript 分页问题请高手们解决一下

分页问题 本人的分不太多 请高手们见谅

调用顺序是这样的

首先一个请求到到login.action的findAllUsers()方法成功执行后跳到SUCCESS相应的页面(就是3的页面 详细内容在下面),
success页面通过findAllUsers()方法传过来的值进行页面传值,然后success里面形成一个如PageUtil类里面getToolsMenu()方法返回的字符串(就是首页,下一页的字符串)
现在问题出现了 当点击下一页的时候他是怎么用javascript往action里面传值的,就是这条语句document.forms(0).pages.value=1,原以为只要在login.action里面声明一个私有成员就可以实现,但是不好使,pages是login.action里面的私有成员吗?如果是用什么方法传进去的值,如果不是又怎么实现下一页的?(难道javascript可以操纵login.action里面的私有成员?)

1---------------------------------------------------------
这个是login.action的类 请求执行里面的findAllUsers()方法

package org.login.actions;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.login.page.PageUtil;
import org.login.service.IUserService;
import org.login.vo.Users;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Preparable;

public class Login extends ActionSupport implements ModelDriven,
Preparable {
private IUserService userService;
private String id;
private int pages = 1;
private int pagesize = 3;
private String pageBar;
private List list;
private Users user;

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public IUserService getUserService() {
return userService;
}

public void setUserService(IUserService userService) {
this.userService = userService;
}

public int getPages() {
return pages;
}

public void setPages(int pageIndex) {
this.pages = pageIndex;
}

public String getPageBar() {
return pageBar;
}

public void setPageBar(String pageBar) {
this.pageBar = pageBar;
}

public List getList() {
return list;
}

public void setList(List list) {
this.list = list;
}

public Users getUser() {
return user;
}

public void setUser(Users user) {
this.user = user;
}

public void prepare() throws Exception {
if (id == null || id.length() == 0)
user = new Users();
else
user = getUserService().getUserById(Integer.parseInt(id));
}

public String execute() throws Exception {
if (getUserService().isLogin(user)) {
return SUCCESS;
}
return INPUT;
}

public String save() throws Exception {
System.out.println(user.getUserName().toString()
+ "@@@@@@@@@@@@@@@@@@@@@@");
if (getUserService().insertUser(user)) {
return SUCCESS;
}
return ERROR;
}

public String edit() {
return SUCCESS;
}

public String update() throws Exception {
if (getUserService().updateUser(user)) {
return SUCCESS;
}
return ERROR;
}

// 好像不能直接对id进行操作
public String delete() throws Exception {
if (getUserService().deleteUser(Integer.parseInt(id))) {
return SUCCESS;
}
return ERROR;
}

public String findAllUsers() throws Exception {
PageUtil page = new PageUtil();
int count = getUserService().getCount();
page.setCurPage(pages);
page.setPageSize(pagesize);
page.setTotalRow(count);
pageBar = page.getToolsMenu();
Map pageMap = new HashMap();
pageMap.put("start", page.getStart());
pageMap.put("end", page.getEnd());
list = getUserService().getAllUser(pageMap);
return SUCCESS;
}

public Users getModel() {
return user;
}

public int getPagesize() {
return pagesize;
}

public void setPagesize(int pagesize) {
this.pagesize = pagesize;
}

}

2-----------------------------------------------------
这个是分页算法类PageUtil

package org.login.page;
import java.util.List;

/**

  • ibatis分页Bean
  • @author Administrator
    *
    */
    public class PageUtil {

    private int curPage = 0; //当前页
    private int pageSize = 0; //每页多少行
    private int endSize ; //用于not in(select top endSize id)不在多少行内
    private int totalRow ; //共多少行
    private int totalPage ; //共多少页

    public int getStart(){
    if(curPage>1)
    return (curPage-1)*pageSize;
    else
    return 0;
    }
    public int getEnd(){
    return pageSize;
    }
    public int getCurPage() {
    return curPage;
    }
    public void setCurPage(int curPage) {

    int temp = pageSize * (curPage-1);
    this.setEndSize(temp);
    this.curPage = curPage;
    }
    public int getEndSize() {
    return endSize;
    }
    public void setEndSize(int endSize) {
    this.endSize = endSize;
    }
    public int getPageSize() {
    return pageSize;
    }
    public void setPageSize(int pageSize) {
    this.pageSize = pageSize;
    }
    public int getTotalRow() {
    return totalRow;
    }
    public void setTotalRow(int totalRow) {

    totalPage = totalRow/pageSize;
    if(totalRow%pageSize > 0)
    totalPage = totalPage + 1;

    this.totalRow = totalRow;
    }
    public int getTotalPage(){

    return this.totalPage;
    }
    public String getToolsMenu() {
    StringBuffer str = new StringBuffer("");
    int next, prev;
    prev = curPage - 1;
    next = curPage + 1;

    if (curPage > 1) {
        str.append(
            "<a href=\"#\" onclick=\"document.forms(0).pages.value=1;document.forms(0).submit();\">首页</a>&nbsp;");
    } else {
        str.append("<a href=\"#\">首页</a>&nbsp;");
    }
    if (curPage > 1) {
        str.append(
            "<a href=\"#\" onclick='document.forms(0).pages.value=" +prev + ";document.forms(0).submit();'>上页</a>&nbsp;");
    } else {
        str.append("<a href=\"#\">上页</a>&nbsp;");
    }
    if (curPage < totalPage) {
        str.append(
            "<a href=\"#\" onclick='document.forms(0).pages.value=" +next + ";document.forms(0).submit();'>下页</a>&nbsp;");
    } else {
        str.append("<a href=\"#\" >下页</a>&nbsp;");
    }
    if (totalPage > 1 && curPage != totalPage) {
        str.append(
            "<a href=\"#\"  onclick='document.forms(0).pages.value=" +totalPage + ";document.forms(0).submit();'>末页</a>&nbsp;&nbsp;");
    } else {
        str.append("<a href=\"#\" >末页</a>&nbsp;&nbsp;");
    }
    str.append(" 共" + totalRow + "条记录");
    str.append("  每页<SELECT size=1 name=pagesize onchange='this.form.pages.value=1;this.form.pageSize.value=this.value;this.form.submit();'>");
    
    if (pageSize == 3) {
        str.append("<OPTION value=3 selected>3</OPTION>");
    } else {
        str.append("<OPTION value=3>3</OPTION>");
    }
    
    if (pageSize == 10) {
        str.append("<OPTION value=10 selected>10</OPTION>");
    } else {
        str.append("<OPTION value=10>10</OPTION>");
    }
    if (pageSize == 20) {
        str.append("<OPTION value=20 selected>20</OPTION>");
    } else {
        str.append("<OPTION value=20>20</OPTION>");
    }
    if (pageSize == 50) {
        str.append("<OPTION value=50 selected>50</OPTION>");
    } else {
        str.append("<OPTION value=50>50</OPTION>");
    }
    if (pageSize == 100) {
        str.append("<OPTION value=100 selected>100</OPTION>");
    } else {
        str.append("<OPTION value=100>100</OPTION>");
    }
    str.append("</SELECT>");
    str.append("条 分" + pageSize + "页显示 转到");
    str.append("<SELECT size=1 name=Pagelist onchange='this.form.pages.value=this.value;this.form.submit();'>");
    for (int i = 1; i < totalPage + 1; i++) {
        if (i == curPage) {
            str.append("<OPTION value=" + i + " selected>" + i +
                       "</OPTION>");
        } else {
            str.append("<OPTION value=" + i + ">" + i + "</OPTION>");
        }
    }
    str.append("</SELECT>页");
    str.append("<INPUT type=hidden  value=" + curPage + " name=\"pages\" > ");
    str.append("<INPUT type=hidden  value=" + pageSize +
               " name=\"pageSize\"> ");
    return str.toString();
    

    }

}

3---------------------------------------------------------------------------------
这个是success成功之后跳转的页面 也就是显示分页的页面

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%@ taglib uri="/struts-tags" prefix="s" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">





Users list

<br><br> table {<br><br> border-collapse: collapse; <br> font-size: 12px;<br><br> }<br><br>



























style="background-color:#dddddd"/s:if

style="background-color:#eeeeee"/s:else>





        <td align="center">   
        <s:url id="update" action="edit">   
           <s:param name="id">   
           <s:property value="id" />
           </s:param>
           <s:param name="userName">   
           <s:property value="userName" />
           </s:param>  
           <s:param name="password">   
           <s:property value="password" />
           </s:param>     
        </s:url>    
        <s:a href="%{update}">edit</s:a>   
        </td>   

        <td align="center">   
        <s:url id="delete" action="delete">   
           <s:param name="id">   
           <s:property value="id" />   
           </s:param>   
        </s:url>    
        <s:a href="%{delete}">delete</s:a>   
        </td>   
    </tr>   
    </s:iterator>   
    <tr>   
            <td colspan="4">    
                <s:property value="#request.pageBar" escape="false"/>   
            </td>   
    </tr>   
</table>   
</s:form>   



[b]问题补充:[/b]
[i][/i][u][/u][b][/b][color=black][size=xx-large][size=x-large]我也想过是隐藏域。隐藏域可以隐士声明吗?还是那个表单实际上就是对应着action里面的私有成员?[/size][/size][/color]
[b]问题补充:[/b]
[b][i][color=brown][size=xx-large]我也想也是在action中的属性 但是我把pages这个属性改成pages1就不好使了,这是为什么,点下一页的时候报网页上有错误。说document.form[0].pages1.value 不是函数这是什么意思啊[/size][/color][/i][/b]
[b]问题补充:[/b]
[size=xx-large][color=brown]这哥们啊。我还不至于这么愚蠢,action里的我也改了,但是还是不好使。是不是有什么地方没注意的给遗漏了?(所有的pages我都改成pages1了)。[/color][/size]
[b]问题补充:[/b]
还有你所说的。就算我action里面有对应的字段,我用document去取也报错了,除了那个pages,action里的什么变量都不好使,就算把pages改成pages1都不行,也说没有定义,我还没换成别的变量,就是把所有的pages改成pages1都不行.只能用pages这一个变量。[size=xx-large][/size]

UserID UserName Password Options

5个回答

这个地方也要修改,这个就是那个隐藏域嘛,和action的属性对应

str.append(" ");

onclick='document.forms(0).pages.value=" +prev + ";document.forms(0).submit();'

看清楚了没有,它只是给表单里的隐藏域pages设值,然后提交表单而已,

js和struts之间是没什么关系,但表单和struts却是绑定好了属性嘛

action就是一个地址,因此写成
....
其结果是一样的

表单实际上就是对应着action里面的私有成员

晕,你修改了变量当然就不行了,这是和后台action绑定的

public class Login extends ActionSupport implements ModelDriven,
Preparable {
private IUserService userService;
private String id;
[color=red]private int pages = 1; [/color]
private int pagesize = 3;
private String pageBar;
private List list;
private Users user;

document.form[0].pages1.value 这样一定报错的嘛

因为都在表单里没有一个id或name等于pages1的html控件,自然document.form[0].pages1就等于undefined,那document.form[0].pages1.value自然也就报错了

js的部分你都不太懂呢,自己去看看资料

http://cn.hscripts.com/tutorials/javascript/dom/form-object.php

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问