要回退两步八?
history.go(-2);

解决方案 »

  1.   

    返回到action中,再次查询数据库。
      

  2.   

    那就用session对象来保存那些数据试试(虽然有点浪费)。
      

  3.   

    >>>>>返回到action中,再次查询数据库
      首先。我是一个新增。在数据库中没有数据。这个方法不行
    >>>>那就用session对象来保存那些数据试试(虽然有点浪费)。
      这种方法不可取呀。。我可以有更好的方法解决问题。比如将所有的request数据回传,
     不知道有没有更好的方法
      

  4.   

    同意用session或者就是每次转向的时候都把用户的输入作为参数传入下一个页面中,点击回退的时候也把这些信息带入到新增页面中,给那些输入或者选择框相应的内容。
      

  5.   

    我一般也是保存在request中来处理,好像没什么更好的方法了。
      

  6.   

    其实可以这样,我觉得。
     比如你的新增是一个注册吧,
     首先你可以作一个HashMap对象 
     HashMap usermap=new HashMap();
     然后
     usermap.put("userid",request.getParameter("userid"));
     usermap.put("password",request.getParameter("password")); 
     ....... 然后你就得到了一个包含了所有注册信息的hashmap对象。
     在判断是否合法时,你就把这个对象里所包含的用户信息逐个得到。
     如:
     String username=usermap.get("userid");
     ......
     判断有不合法信息时,就把usermap返回去,
    然后在注册也面就得到这个usermap就可以了。
    可能罗嗦了,但也有写好处。
      

  7.   

    我做过类似的注册页面,用的bean实现的。  没填的提示missing
      
      正常的数据保留显示。
      

  8.   

    如果提交数据之前tomcat出问题了,而用户常常是不太熟悉计算机的,难保他会刷新页面,或做其他操作,那么他所输入的数据就很容易丢掉,再也找不到了!就是说,能不能边写边保存,每1分钟自动保存一次,而不影响用户急需输入?
      

  9.   

    可以清楚地看到,最后写入到文件的行去掉了二个byte。程序实现代码    最终的完整程序包含三个类:UploadBean,上载实现类;FileInfo,上载文件信息类;InputField,表单文本信息类;及一个请求上载页、一个JSP调用示例及一个Servlet调用示例。    上载实现类,UploadBean.java:package com.upload;import java.io.*;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.ServletInputStream;
    import javax.servlet.ServletException;
    import java.util.ArrayList;
    import com.upload.FileInfo.*;
    import com.upload.InputField.*;public class UploadBean{
    private String savePath = "c:/"; //服务器端存放路径
    private String strSectFlag = ""; //上传数据区域段标记
    private String CharacterEncoding = ""; // //编码方法
    private byte readByte[] = new byte[4096]; //读入流缓冲区
    private byte writeByte[] = new byte[4096]; //写入流缓冲区
    private int readCount[] = new int[1]; //readCount[]为行字符数
    private int writeCount[] = new int[1];//设置指针变量
    private int upFilesCount = 0; //当前实际上载文件数
    private int pageFileCount = 0;//请求页面存在的文件项数
    private int upFilesMaxCount=10; //最大可上载文件数默认值
    private boolean totalCountOverflowFlag=false; //文件个数溢出标志
    private long totalFilesMaxSize=1024*1024*100; //可上载全部文件容量总和最大值,单位KB
    private long singleFileMaxSize=1024*1024*10;//可上载单个文件容量最大值
    private long upFilesTotalSize = 0 ; //当前实际上载容量
    private boolean totalSizeOverflowFlag = false ;//上传文件容总长溢出标志
    private boolean fileSizeOverflowFlag = false; //文件超长溢出标志
    private ArrayList upFilesList = new ArrayList(); //上载成功文件链表
    private ArrayList inputFieldList = new ArrayList(); //输入框内容链表//设置最大可上载文件数
    public void setTotalFilesMaxCount(int count){
    upFilesMaxCount = count;
    }
    //设置可上载全部文件容量总和最大值,单位byte
    public void setTotalFilesMaxSize(long size){
    totalFilesMaxSize = size;
    }
    //设置单个上载文件最大容量
    public void setSingleFileMaxSize(long size){
    singleFileMaxSize = size;
    }
    //返回上载成功的文件个数
    public int getUpFilesCount(){
    return upFilesCount;
    }
    //返回请求页面的文件项数
    public int getPageFileCount(){
    return pageFileCount;
    }
    //返回上载成功的文件总长度
    public long getUpFilesToatalSize(){
    return upFilesTotalSize;
    }
    //返回是否存在文件总长超长标志
    public boolean isTotalSizeOverFlow(){
    return totalSizeOverflowFlag;
    }
    //返回是否存在单个文件长度溢出标志
    public boolean isSizeOverFlow(){
    return fileSizeOverflowFlag;
    }
    //返回是否存在文件个数超过溢出
    public boolean isTotalCountOverFlow(){
    return totalCountOverflowFlag;
    }//返回对应输入项内容 参数为输入项名称
    public String getParameter(String inputName){
    int i = 0;
    for(i=0;i<inputFieldList.size();i++){
    InputField inputField = new InputField();
    inputField = (InputField)inputFieldList.get(i);
    if(inputName.compareTo(inputField.getInputName())==0){
    return inputField.getInputContent();
    }
    }
    return null;
    }
    //返回输入项数量
    public int getInputFieldCount(){
    return inputFieldList.size();
    }
    //返回输入项指针
    public InputField getInputField(int i){
    if(i < 0 || i > inputFieldList.size() - 1){
    return null;
    }
    return (InputField)inputFieldList.get(i);
    }//返回已上载文件属性链表指针
    public FileInfo getUpFilesInfo(int i){
    if (i < 0 || i > pageFileCount){
    return null;
    }else return (FileInfo)upFilesList.get(i);
    }
    //以请求名形式返回FileInfo
    public FileInfo getUpFilesInfo(String reqName){
    int i = 0;
    FileInfo fileInfo = new FileInfo();
    for(i=0;i<upFilesList.size();i++){
    fileInfo = (FileInfo)upFilesList.get(i);
    if(reqName.compareTo(fileInfo.getReqName())==0){
    return fileInfo;
    }
    }
    return null;
    }//设置上载存贮路径
    public void setSavePath(String savePath){
    File file = new File(savePath);
    if(file.isDirectory())
    this.savePath = savePath;
    else {
    try{
    if(file.mkdir()) this.savePath = savePath;
    }catch(Exception e){
    this.savePath = ".";
    }
    }
    }//由请求上载文件
    public void uploadFile( HttpServletRequest req) throws ServletException, IOException{
    //清空两个表
    init();
    inputFieldList.clear();
    upFilesList.clear();
    //设置Request端字符编码方式
    setCharacterEncoding(req.getCharacterEncoding());
    //设置Request端strSectFlag
    setSectFlag(req.getContentType());
    //从输入流读入数据并写入到文件
    read$writeFile(req.getInputStream());
    }
    private void init(){
    //清空两个表
    upFilesCount = 0 ;
    upFilesTotalSize = 0 ;
    pageFileCount = 0 ;
    totalSizeOverflowFlag = false ;
    fileSizeOverflowFlag = false ;
    totalCountOverflowFlag = false ;
    inputFieldList.clear();
    upFilesList.clear();
    }//取得文件名称(不带路径)
    private String getFileName(String fileName){
    if(fileName.length()==0) return null;
    int i = fileName.lastIndexOf("\\");
    if(i < 0 || i >= fileName.length() - 1){
    i = fileName.lastIndexOf("/");
    if(i < 0 || i >= fileName.length() - 1)
    return fileName;
    }
    return fileName.substring(i + 1);
    }//设置节标志
    private void setSectFlag(String sectFlag){
    strSectFlag = sectFlag;
    int j;
    if((j = strSectFlag.indexOf("boundary=")) != -1){
    //定义数据块起始段标志
    strSectFlag = strSectFlag.substring(j + 9);
    strSectFlag = "--" + strSectFlag;
    }
    }//设置字符编码方式
    public void setCharacterEncoding(String str){
    CharacterEncoding = str;
    }//从输入流读取文件并写入服务器端,完成上载操作
    public void read$writeFile(ServletInputStream servletInputStream)
    throws ServletException, IOException{String filename = null;
    String line;
    //从输入流中查找 "filename"标志 即此处以下部分将为输入流的文件数据
    //i 在此为"filename"标志在行中的位置
    //实际读取的字符数放在readCount[0]中 readCount在此处为指针操作
    while((line = readLine(readByte, readCount, servletInputStream,
    CharacterEncoding)) != null){//处理文件上传
    int i = line.indexOf("filename=");
    if(i >= 0){
    pageFileCount++;//代表页面的文件上载请求项数
    //分离请求名
    String reqName = line;
    int j = reqName.indexOf("name=");
    reqName = reqName.substring(j + 6,reqName.length()-1);
    j = reqName.lastIndexOf("filename=");
    reqName = reqName.substring(0, j-3);
    //该行在"filename"标志后十位处为上载的源文件字串
    //取"filename"标志后十位以后的字串为子串
    filename = line.substring(i + 10,line.length() - 3);
    filename = getFileName(filename);
    if(filename != null ){
    //新建文件 存贮位置为savePath ,名称为filename
    File file = new File(savePath, filename);
    //写文件操作前首先检查上传文件个数是否超过上限
    if (!((upFilesCount>=upFilesMaxCount) ||
    (upFilesTotalSize>=totalFilesMaxSize))){
    //没有超过上限(文件上载总个数、总长度)
    //将数据写入文件
    writeFile(file,servletInputStream,CharacterEncoding);
    }
    //文件正确性验证
    int validate = validateFile(file);
    if(validate == 1){
    setUpFilesInfo(file,reqName); //记录上传成功的文件列表
    upFilesCount++;
    }else{
    file.delete();
    setUpFilesInfo(null,reqName);
    }
    }else setUpFilesInfo(null,reqName);//记录空文件信息
    }
    //处理input内容
    int j = line.indexOf("name=\"");
    if(j>0 && i<0){
    String inputName = line.substring(j+6, line.length()-3);
    String inputContent="";
    //读过一空行
    line = readLine(readByte, readCount, servletInputStream, CharacterEncoding);
    while((line = readLine(readByte, readCount, servletInputStream,
    CharacterEncoding)).indexOf(strSectFlag)<0){
    //去结尾部分的/r/n符号(回车换行符)
    inputContent = inputContent+line.substring(0,line.length()-2);
    }
    setInputContent(inputName,inputContent);
    }
    }
    }