页面是这样的:就一个table,里面显示的是一张数据表里的几个字段,显示的每行数据后有一个修改的按钮,点击修改会转到修改页面,点击修改页面的确定修改按钮后提示修改成功或失败!
问题是这样的:我修改成功后返回显示数据的页面,页面并没有显示刚刚我修改成功的数据,而是以前的旧数据,刷新和重新启动浏览器都没用,一开始是Session忘关了,可我补上之后,还是不行。数据修改成功我是到数据库里确认的,确实是修改成功了。望有经验的师傅给小弟一点小小的提示,谢谢!使用Hibernate框架操作数据库并提供简单CRUD功能的类(BaseHibernateDao)public class BaseHibernateDao {
private static Session session;
private static Transaction tx;
private static boolean isSuccessful; protected Session getSession() { //获取Session
return BaseHibernateDao.session = new Configuration().configure()
.buildSessionFactory().openSession();
} protected void setSession(Session session) { //设置Session
BaseHibernateDao.session = session;
} protected void closeSession(Session session) { //关闭Session
if (session != null)
session.close();
session = null;
} protected boolean add(Object obj) { //保存
try {
session = getSession();
tx = session.beginTransaction();
session.save(obj);
isSuccessful = true;
tx.commit();
} catch (RuntimeException e) {
e.printStackTrace();
isSuccessful = false;
tx.rollback();
} finally {
closeSession(session);
}
return isSuccessful;
} protected boolean del(Object obj) { //删除
try {
session = getSession();
tx = session.beginTransaction();
session.delete(obj);
isSuccessful = true;
tx.commit();
} catch (RuntimeException e) {
e.printStackTrace();
isSuccessful = false;
tx.rollback();
} finally {
closeSession(session);
}
return isSuccessful;
} protected boolean upd(Object obj) { //修改
try {
session = getSession();
tx = session.beginTransaction();
session.update(obj);
isSuccessful = true;
tx.commit();
} catch (RuntimeException e) {
e.printStackTrace();
isSuccessful = false;
tx.rollback();
} finally {
closeSession(session);
}
return isSuccessful;
} protected Object get(Class clz, Serializable sid) { //查询
Object obj = null;
try {
session = getSession();
obj = session.get(clz, sid);
} catch (RuntimeException e) {
e.printStackTrace();
} finally {
closeSession(session);
}
return obj;
}
}
点击[修改]后跳转到的Servlet(UpdateServlet)public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
long bookID=Long.parseLong(request.getParameter("id")); //页面传递过来的id
BookBean book=new BookDaoImpl().getBookByBookID(bookID);//考虑到并发性所以再根据id查一遍要修改的数据
request.getSession().setAttribute("Book", book); //将查到的数据放在Session中
request.getRequestDispatcher("update.jsp").forward(request, response); //跳转
}
public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
doPost(request,response);
}
点击[确定修改]后跳转到的Servlet(DoUpdateServlet)public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
BookDaoImpl bdi=new BookDaoImpl();
BookBean book=(BookBean) request.getSession().getAttribute("Book"); //通过Session中的Book属性实例化BookBean类
book.setBookname(request.getParameter("bookName"));//修改图书名称
book.setBookprice(Double.parseDouble(request.getParameter("bookPrice")));//修改图书价格
long userid=bdi.getUserIDByUserName(request.getParameter("userName"));
book.getUser().setUserid(userid);//修改用户ID
book.getUser().setUsername(request.getParameter("userName"));//修改用户名称
if(bdi.updateBook(book)){ //成功后跳转到的页面
response.getWriter().println("<script>alert('Mission is Successfully!');window.location='index.jsp';</script>");
}else{ //失败后跳转到的页面
response.getWriter().println("<script>alert('Mission failed!');window.location='update.jsp';</script>");
}
}
public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
doPost(request,response);
}
负责显示数据的Servlet(GetAllServlet)public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
BookDaoImpl bdi=new BookDaoImpl();
request.getSession().setAttribute("ALLBOOKS",bdi.getPortion()); //查询出所有的数据封装在Session中
request.getRequestDispatcher("index.jsp").forward(request,response); //转发到显示数据的JSP
}
public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
doPost(request,response);
}
负责显示数据的JSP(index.jsp)<c:forEach var="book" varStatus="status" items="${sessionScope.ALLBOOKS}">
    <tr <c:if test="${status.index%2==1}"> style="background-color:#fbb957;" </c:if>>
     <td>${book.bookname}</td>
     <td>${book.bookprice}</td>
     <td>${book.user.username}</td>
     <td><a href="BookUpdateServlet?id=${book.bookid}">[修改]</a></td>
     <td><a href="">[删除]</a></td>
    </tr>
    </c:forEach>
修改数据的JSP(update.jsp)<form name="updateFrm" action="BookDoUpdateServlet" method="post">
    <label>图书名称:<input type="text" name="bookName" value="${sessionScope.Book.bookname}"/></label><br/>
    <label>图书价格:<input type="text" name="bookPrice" value="${sessionScope.Book.bookprice}"/></label><br/>
    <label>借&nbsp;阅&nbsp;&nbsp;人:<input type="text" name="userName" value="${sessionScope.Book.user.username}"/></label><br/>
    <label><a href="javascript:document.forms[0].submit();">确定修改</a></label>
    <label><a href="index.jsp">回到首页</a></label>
    </form>
谢谢大家能耐心看玩我的代码(本来想只贴出问题的页面和Servlet的,但考虑到可能都有连带问题所以就……嘻嘻)。

解决方案 »

  1.   

    public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
            request.setCharacterEncoding("utf-8");
            response.setCharacterEncoding("utf-8");
            BookDaoImpl bdi=new BookDaoImpl();
            BookBean book=(BookBean) request.getSession().getAttribute("Book"); //通过Session中的Book属性实例化BookBean类
            book.setBookname(request.getParameter("bookName"));//修改图书名称
            book.setBookprice(Double.parseDouble(request.getParameter("bookPrice")));//修改图书价格
            long userid=bdi.getUserIDByUserName(request.getParameter("userName"));
            book.getUser().setUserid(userid);//修改用户ID
            book.getUser().setUsername(request.getParameter("userName"));//修改用户名称
             //这个book应该要保存到session 中吧        if(bdi.updateBook(book)){ //成功后跳转到的页面
                response.getWriter().println("<script>alert('Mission is Successfully!');window.location='index.jsp';</script>");
            }else{ //失败后跳转到的页面
                response.getWriter().println("<script>alert('Mission failed!');window.location='update.jsp';</script>");
            }
        }
        public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
            doPost(request,response);
        }
      

  2.   

    Hibernate里有个自动提交的功能.
    你可以把他相关配置参数设置为truehibernate.xml<property name="hibernate.connection.autocommit">true</property>
      

  3.   

    谢谢#2楼朋友的提醒,确实是这个原因,下面是我改动后的Servlet代码:int nowPageNumber=Integer.parseInt(String.valueOf(request.getSession().getAttribute("nowPage")));//获取当前页
    if(bdi.updateBook(book)){
    request.getSession().setAttribute("ALLBOOKS",bdi.getPortion(nowPageNumber)); //这里用分页方法重查了一次,这样保证了修改后仍停留在那一页
    response.getWriter().println("<script>alert('Mission is Successfully!');window.location='index.jsp';</script>");
    }
      

  4.   

    怎么能把 session 和 transaction 置为成员变量呢?