我的JSP / Servlet / EclipseLink-JPA项目遇到了一些奇怪的问题。我直接从NetBeans(EE包)7.2.1运行Apache Tomcat 7.0.27.0,数据库是PostgresSQL
这是一些代码:
jsp页面负责显示带有产品的表,index.jsp:
<% for(Product product:ProductController.getProducts()){ %><tr> <td><% out.print(product.getName()); %></td> <td><% out.print(product.getPrice()); %></td> <td><% out.print(product.getUnit()); %></td> <td><% out.print(product.getSales().size()); %></td> <td><a target=\"_blank\" href="viewSales.jsp?id=<%=product.getId_product()%>">sales</a> </td> <td> <a target="_blank" href="updateProduct.jsp?id=<%=product.getId_product()%>&name=<%=product.getName()%>&price=<%=product.getPrice()%>&unit=<%=product.getUnit()%>">edit</a> </td> </tr><% } %>
最后一个单元格中的两个链接用于查看销售和相应更新产品。我们对最后一个感兴趣,导致另一个jsp:
<form action="UpdateProduct" method="post">
<input type="text" name="id" style="display:none" value="<%=request.getParameter("id") %>">
<input type="text" name="name" size="30" placeholder="Название" value="<%=request.getParameter("name")%>"><br>
<input type="text" name="price" size="30" placeholder="Цена" value="<%=request.getParameter("price")%>"><br>
<input type="text" name="unit" size="30" placeholder="Единица" value="<%=request.getParameter("unit")%>"><br>
<input type="submit" name="save" value="Сохранить">
</form>
从这里开始我们将使用servlet UpdateProduct.java:
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
Long id = Long.parseLong(request.getParameter("id"));
String name = request.getParameter("name");
double price = Double.parseDouble(request.getParameter("price"));
String units = request.getParameter("unit");
ProductController.updateProduct(id, name, price, units);
response.sendRedirect("");
} finally {
out.close();
}
}
ProductcController.updateProduct工作正常(我可以直接在数据库中看到它)。
但是当我返回第一页(index.jsp)时,无论有多少次刷新它,我都看不到任何变化。我最接近的猜测是Apache Tomcat(我正在运行它)以某种方式在上下文中的第一个请求中保存数据并且不按需刷新它。另外,奇怪的是添加产品效果很好。
答案 0 :(得分:0)
通过在展示之前刷新每个产品来解决问题
List products = em.createQuery("SELECT p FROM Product p ORDER BY p.id_product").getResultList();
for(Object product:products){
em.refresh(product);
}
我想可以通过保存更新的产品ID并仅刷新它们来改进它。
问题的根源是未知的,因为在其他项目中实现相同的东西但是使用swing GUI一切正常工作没有刷新。也许这是在Tomcat上执行类的东西。