為什麼我在程序中執行修改的時候用HIBERNATE的session.update()後,我在頁面刷新總是原來的和現在的變來變去,我看下數據庫裡的數據己經修改了,有沒高手小得的這是啥原因,頁面我己經清除過緩存 <%
  response.setHeader("Pragma","No-cache");
  response.setHeader("Cache-Control","no-cache");
  response.setDateHeader("Expires", 0);  %>
我的DAO方法:
public void update1(TbUser user){
Session session = HibernateSessionFactory.getSession();
Transaction tran = session.beginTransaction();
session.clear();

session.update(user);

tran.commit();
session.clear();
//session.refresh(user);
//session.close();

session.flush();
session.close();
}
SESSION又是刷新又是更新,用盡了方法,還是不行,汗,不小得啥原因,有人說是要轉發,在配置方件也配過
<action
      attribute="listINVForm"
      name="listINVForm"
      path="/showuser"
      scope="request"
      type="com.zwei.struts.action.ShowuserAction">
      <forward name="success" path="/WEB-INF/admin/showuser.jsp" /> 
      <forward name="edit" path="/edituser.do" />
    </action>
 <action
      attribute="userForm"
      name="userForm"
      path="/edituser"
      scope="request"
      type="com.zwei.struts.action.EdituserAction">
      <forward name="success" path="/WEB-INF/admin/edituser.jsp" />
       <forward name="fail" path="/edituserfail.jsp" redirect="true" />
    </action>
    <action
      attribute="userForm"
      name="userForm"
      path="/getedituser"
      scope="request"
      type="com.zwei.struts.action.GetedituserAction">
      <forward
        name="success"
        path="/edituserok.jsp"
        redirect="true" />
    </action>
這裡的修改成功後,我就跳到這個頁面了edituserok.jsp,這頁面有個自動跳轉到showuser.do
內容是:<script>alert('修改用戶成功');location.href='/LendBorrow/showuser.do';</script>高手們有沒有人遇到過,幫幫忙

解决方案 »

  1.   

    location.href='/LendBorrow/showuser.do'感觉是:showuser.do的问题  再次重定向过去时,没有重新查数据库。
    不是update的原因。也有可能是浏览器缓存了,你做完更新后,关掉浏览器,再进去修改后的页面,如果记录已经改变的话就是浏览器缓存问题找到原因后网上找找就能解决了
      

  2.   

    可能是action中的forward的问题。
    改为重定向
    response.sendRedirect();
    试试
      

  3.   

    response.setHeader("Pragma","No-cache"); 
      response.setHeader("Cache-Control","no-cache"); 
      response.setDateHeader("Expires", 0); 
    最好建个过滤器,过滤所有页面
      

  4.   

    看起来是showuser.do的问题,代码贴上来看看
      

  5.   

    我有時候就是修改了,關掉浏览器,刷新的時候也還是會變來變去,如果重啟TOMCAT,不管怎麼刷也不會變了,不小得這是浏览器原因,還是緩存
      

  6.   

    你清理session的缓存没有作用,他是页面上有缓存知道吗
    你要把页面上的缓存去掉
    你把当前的页面从新跳转一下就行了
      

  7.   

    public ActionForward execute(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response) throws ParseException {   List<TbUser> list = new ArrayList();
      list = (List<TbUser>)request.getAttribute("list");
    if(list!=null){
    list=null;
    }
    DynaActionForm listINVForm = (DynaActionForm) form;// TODO Auto-generated method stub
    String deid = request.getParameter("deid");
    String com = request.getParameter("com");
    String username = request.getParameter("username");
    String bodyfen = request.getParameter("bodyfen");
    String username1 = "%"+username+"%";

    String type = listINVForm.getString("type");
    String[] teachid = listINVForm.getStrings("teachid");
    HttpSession session = request.getSession();

    if (type.equals("edit")) {
    request.setAttribute("teachid", teachid[0]);
    return mapping.findForward("edit");
    }



    Usermanager mamanager = new Usermanager();//這下面是分面用的
    Map map = new HashMap();
    int currenPage = 1;
    String allCount = request.getParameter("allCount");
    String pageNo = request.getParameter("pageNo");

    if (!"".equals(deid) && deid != null) {
    map.put("tbDepart", deid);
    }
    if (!"".equals(com) && com != null) {
    map.put("com", com);

    if (!"".equals(username) && username != null) {
    map.put("username", username1);

    if (!"".equals(bodyfen) && bodyfen != null) {
    map.put("bodyfen", bodyfen);

    if("".equals(allCount) || allCount==null){
    allCount = mamanager.findCountByMap(map) + "";
    request.setAttribute("allCount", allCount);
    }
    if("".equals(pageNo) || pageNo==null){
    list = mamanager.findByMap(map, 0, 10);
    }else{
    currenPage = Integer.parseInt(pageNo);
    list = mamanager.findByMap(map, (currenPage-1)*10, 10);
    }
    request.setAttribute("pageNo", currenPage);
    request.getSession().setAttribute("deid", deid);
    request.getSession().setAttribute("bodyfen", bodyfen);
    request.getSession().setAttribute("com", com);
    request.getSession().setAttribute("username", username);
    request.setAttribute("list", list);
    return mapping.findForward("success");
    }
      

  8.   

    高手怎麼從新跳轉啊,我也覺得是頁面上緩存,我也好像清了啊:頁面上最前面加了個
    《%response.setHeader("Pragma","No-cache");
      response.setHeader("Cache-Control","no-cache");
      response.setDateHeader("Expires", 0);
    %》
    配置又重定向了個<forward
            name="success"
            path="/edituserok.jsp"
            redirect="true" /> 
      

  9.   

     <script>alert('修改用戶成功');location.href='/LendBorrow/showuser.do';
    ->
    location.href='/LendBorrow/showuser.do?tt=Math.random()'这样可以骗过浏览器,不使用缓存
      

  10.   

    還是不行,頁面點刷新還是變來變去的<script>alert('修改用戶成功');location.href='/LendBorrow/showuser.do?tt=Math.random()';</script>
      

  11.   

    到底啥子原因,這問題我都想盡辦法了,如果關掉TOMCAT,重新打開,頁面刷新就不會變了,在執行修改後,刷新又和上一次數據變來變去
      

  12.   

    貼子我加分了,有高手幫忙解答,我馬上送分:我的頁面相關代碼貼上:
    showuser.do
    public ActionForward execute(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response) throws ParseException {  List <TbUser> list = new ArrayList();
      list = (List <TbUser>)request.getAttribute("list");
    if(list!=null){
    list=null;
    }
    DynaActionForm listINVForm = (DynaActionForm) form;// TODO Auto-generated method stub
    String deid = request.getParameter("deid");
    String com = request.getParameter("com");
    String username = request.getParameter("username");
    String bodyfen = request.getParameter("bodyfen");
    String username1 = "%"+username+"%";String type = listINVForm.getString("type");
    String[] teachid = listINVForm.getStrings("teachid");
    HttpSession session = request.getSession();if (type.equals("edit")) {
    request.setAttribute("teachid", teachid[0]);
    return mapping.findForward("edit");
    }Usermanager mamanager = new Usermanager();//這下面是分面用的
    Map map = new HashMap();
    int currenPage = 1;
    String allCount = request.getParameter("allCount");
    String pageNo = request.getParameter("pageNo");if (!"".equals(deid) && deid != null) {
    map.put("tbDepart", deid);
    }
    if (!"".equals(com) && com != null) {
    map.put("com", com);
    }
    if (!"".equals(username) && username != null) {
    map.put("username", username1);
    }
    if (!"".equals(bodyfen) && bodyfen != null) {
    map.put("bodyfen", bodyfen);
    }
    if("".equals(allCount) || allCount==null){
    allCount = mamanager.findCountByMap(map) + "";
    request.setAttribute("allCount", allCount);
    }
    if("".equals(pageNo) || pageNo==null){
    list = mamanager.findByMap(map, 0, 10);
    }else{
    currenPage = Integer.parseInt(pageNo);
    list = mamanager.findByMap(map, (currenPage-1)*10, 10);
    }
    request.setAttribute("pageNo", currenPage);
    request.getSession().setAttribute("deid", deid);
    request.getSession().setAttribute("bodyfen", bodyfen);
    request.getSession().setAttribute("com", com);
    request.getSession().setAttribute("username", username);
    request.setAttribute("list", list);
    return mapping.findForward("success");
    }
    <action
          attribute="listINVForm"
          name="listINVForm"
          path="/showuser"
          scope="request"
          type="com.zwei.struts.action.ShowuserAction">
          <forward name="success" path="/WEB-INF/admin/showuser.jsp" />
          <forward name="edit" path="/edituser.do" />
        </action>
    <action
          attribute="userForm"
          name="userForm"
          path="/edituser"
          scope="request"
          type="com.zwei.struts.action.EdituserAction">
          <forward name="success" path="/WEB-INF/admin/edituser.jsp" />
          <forward name="fail" path="/edituserfail.jsp" redirect="true" />
        </action>
        <action
          attribute="userForm"
          name="userForm"
          path="/getedituser"
          scope="request"
          type="com.zwei.struts.action.GetedituserAction">
          <forward
            name="success"
            path="/edituserok.jsp"
            redirect="true" />
        </action>
    這裡的修改成功後,我就跳到這個頁面了edituserok.jsp,這頁面有個自動跳轉到showuser.do
    內容是: <script>alert('修改用戶成功');location.href='/LendBorrow/showuser.do?tt=Math.random()';  </script> 
      
    修改用戶頁面:
     <%
      response.setHeader("Pragma","No-cache"); 
      response.setHeader("Cache-Control","no-cache"); 
      response.setDateHeader("Expires", 0); 
      %>
    <%@ page language="java" pageEncoding="big5"%><%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
    <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
    <%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
    <%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>
    <%@ page import="java.util.List" %>
    <%@ page import="com.zwei.vo.MaterialType" %>
    <%@ page import="com.zwei.vo.ColorType" %>
    <%@ page import="com.zwei.vo.TbDepart" %>
    <%@ page import="com.zwei.vo.Company" %>
    <%@ page import="com.zwei.manager.ColorTypemanager" %>
    <%@ page import="com.zwei.manager.Departmanager" %>
    <%@ page import="com.zwei.manager.MaterialTypemanager" %>
    <%@ page import="com.zwei.manager.Companymanager" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <html:base />
        
        <title>edituser.jsp</title> <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
    <link rel="stylesheet" href="/LendBorrow/css/css_conter.css" type="text/css"></link>
      </head>   <script>
       function checkEdit()
          {       var regu2 = "^[0-9a-zA-Z\u4e00-\u9fa5]+$"; 
            var username = document.forms[0].username.value;         if( username=="" )
           {
            alert("請輸入用戶名!");
            return false;
           }
           if(new RegExp(regu2).exec(username)==null)
           {
            alert("用戶名隻能由數字,字母,漢字組成!");
    return false;
           }
           if(username.length >25)
           {
            alert("用戶名長度小於25位");
    return false;
           }
           
           return true;
          }

    </script>
      <%
       Departmanager deptmanager = new Departmanager();
    Companymanager commanager = new Companymanager();
       String companyname = (String)request.getAttribute("companyname");
    String deptname = (String)request.getAttribute("deptname");
    String companyId = (String)request.getAttribute("companyId");
    String departId = (String)request.getAttribute("departId");
       %>
       
      <body>  <br>
        <center><font size="3">修改用戶信息</font></center><br>
        <div align="center">
      <html:form action="/getedituser"  enctype="multipart/form-data" method="post" onsubmit="return checkEdit()">
          <table border="1">
          <html:hidden property="userid" />
       
            <tr>
              <td align="left">用戶名&nbsp;
              <html:text property="username" />
              <td align="left">性別&nbsp;
              <input name="sex" type="radio" value="男" checked> 
    男 
    <input type="radio" name="sex" value="女"> 
    女</td>
            </tr>
           
           <tr>    
           
        <td class="9P" align=left><font size=2>所屬公司</font><span class="pp">*</span>
        &nbsp;&nbsp;&nbsp;
         <select name="companyId" style=" background-color:#FFEEEE;" onChange="document.all.re_name.value=this.value;" >
       
        <option value="${companyId }">${companyname }</option>
        <%
        List<Company> list9 = commanager.selectCompany(companyname);
        for(int i1=0;i1<list9.size();i1++){%>
        <option value="<%=list9.get(i1).getCompanyId() %>"><%=list9.get(i1).getCompanyName() %></option>
        <%}%>
        </select>
        </td>
        <td class="9P" align=left colspan=2><font size=2>所屬部門</font><span class="pp">*</span>
        &nbsp;&nbsp;&nbsp;
         <select name="departId" style=" background-color:#FFEEEE;" onChange="document.all.re_name.value=this.value;" >
       
        <option value="${departId }">${deptname }</option>
        <%
        List<TbDepart> list4 = deptmanager.selectDepart(deptname);
        for(int i1=0;i1<list4.size();i1++){%>
        <option value="<%=list4.get(i1).getDepartId() %>"><%=list4.get(i1).getDepartname() %></option>
        <%}%>
        </select>
        </td>
     </tr>
            <tr></tr>
            <tr>    
              <td colspan="2" align="center"><input type=image src="/LendBorrow/images/zengjia.gif" border=0 name=submit1>
              <a href="/LendBorrow/showuser.do"><img src="/LendBorrow/images/fanhui.gif" border="0"/></a></td>
            </tr>
          </table>
        </html:form>
        </div>
      </body>
    </html>修改後用戶ACTION
    public ActionForward execute(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response) { UserForm userForm = (UserForm) form;// TODO Auto-generated method stub
    Usermanager usermanager = new Usermanager();
    String userid = request.getParameter("userid");
    String username = request.getParameter("username");
    String sex = request.getParameter("sex");
    TbUser user = usermanager.get(userid);
    String companyId = request.getParameter("companyId");
    user.setSex(sex);
    Departmanager deptmanager = new Departmanager();
    Companymanager commanager = new Companymanager();
    user.setUsername(username);
    String deptid = request.getParameter("departId");
    List<TbDepart> list = deptmanager.select(deptid);
    List<Company> list1 = commanager.select(companyId);
    user.setTbDepart(list.get(0));
    user.setCompany(list1.get(0));
    usermanager.update1(user);
    user=null;
    return mapping.findForward("success");

    }
      

  13.   

    現在搞定了一半,就是刷新不會變了,我在DAO包裡面在修改時加了一個HibernateSessionUtil類代碼:
    Session session = HibernateSessionUtil.currentSession();
    session.saveOrUpdate(user);
    另外我在過濾器中配置了一個:
    public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) throws IOException, ServletException {
    // TODO Auto-generated method stub
    try
            {
            //開始一個新的事務
                log.debug("Starting a database transaction");
                HibernateSessionUtil.beginTransaction();
                log.debug( "Request Path:\t" + ((HttpServletRequest)request).getServletPath() );
                // Call the next filter (continue request processing)
                chain.doFilter(request,response);
                //提交事務
                log.debug("Committing the database transaction");
                HibernateSessionUtil.commitTransaction();
               
            }
            catch (Throwable ex)
            {
            ex.printStackTrace(); 
                try
                {
                //回滾事務
                    log.debug("Trying to rollback database transaction after exception");
                    //HibernateSessionUtil.rollbackTransaction(); 
                }
                catch (Throwable rbEx)
                {
                    log.error("Could not rollback transaction after exception!", rbEx);
                }
               //拋出異常
                throw new ServletException(ex);
            }
    }
    我在執行修改時,刷新頁面不會在跳,數據庫數據也被改過來了,但是頁面還是原來的數據不管怎麼刷也不會變,除非重啟TOMCAT就會變成修改後的,我開始以為是他沒有進到DAO包裡面進行查數據庫,可我進行斷點調 試時,程序都執行到了:
    showuser.do 代碼如下
    if("".equals(allCount) || allCount==null){
    allCount = mamanager.findCountByMap(map) + ""; // 這是查數據庫的,都執行到了,為什麼頁面顯示還是修改前的數據,不解????
    request.setAttribute("allCount", allCount);

    if("".equals(pageNo) || pageNo==null){
    list = mamanager.findByMap(map, 0, 10);// 這是查數據庫的,都執行到了,為什麼頁面顯示還是修改前的數據,不解????
    }else{
    currenPage = Integer.parseInt(pageNo);
    list = mamanager.findByMap(map, (currenPage-1)*10, 10);
    }
    request.setAttribute("pageNo", currenPage);
    request.getSession().setAttribute("deid", deid);
    request.getSession().setAttribute("bodyfen", bodyfen);
    request.getSession().setAttribute("com", com);
    request.getSession().setAttribute("username", username);
    request.setAttribute("list", list);
    return mapping.findForward("success"); 
      

  14.   

    搞定了,居然還是SESSION緩存的問題,不是浏览器緩存。想的頭都大了。。