Warm tip: This article is reproduced from serverfault.com, please click

jsp-为什么$ {budget}在提交arequest以减少费用后不会刷新

(jsp - Why $ {budget} wont refresh after submitting arequest to reduce it)

发布于 2020-11-29 16:21:38

我希望我的预算以开始= 50的形式在网站的首次访问中显示。这应该显示而不必提交一次

所以问题nr.1:如何显示预算= 50而又不让我的servlet在必要之前工作?

问题2:-我输入数字(XXXXXX)并提交后,预算应减少5。每次我提交数字时,都应该发生这种情况。但事实并非如此。看来这并没有节省预算

我的JSP:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
<link rel="stylesheet" href="CSS/style.css">
</head>
<body>
    <h5>Losziehung</h5>
    <p id="u1">Derzeitiges Budget: ${budget} 
    <div id="formular">
    <form method="post" action="GamblingServlet">
        
        <p>Ihre Glueckszahl
        
        <input name="eingabe" type="text" size="50" maxlength="6" placeholder="XXXXXX">
        <br><button id="lossenden" name="losziehung"type="submit">Losziehung durchfuehren</button>
        
        <br><p>Eine Losziehung kostet 5Eur
            
    </form>
    Derzeitiges Budget: ${budget}
    </div>
</body>
</html>

我的Servlet

@WebServlet("/GamblingServlet")
public class GamblingServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String gluecksZahlen = request.getParameter("eingabe");
        String budgetInt = "50";
        
        HttpSession session = request.getSession();
        session.setAttribute("budget", budgetInt);
        
        if(session.isNew()) {
            
            budgetInt = "45";
            session = request.getSession();
            session.setAttribute("budget", budgetInt);
        
        
        
        } else {
            String budgetZwei = (String) session.getAttribute("budget");
            int sessionGuthaben = Integer.parseInt(budgetZwei);
            sessionGuthaben = sessionGuthaben - 5;
            budgetInt = Integer.toString(sessionGuthaben);
            session.setAttribute("budget", budgetInt);
        }
        
        //Weiterleiten an eine andere Ressource (Servlet, HTML, JSP...)
        request.getRequestDispatcher("index.jsp").forward(request, response);

    }

}
Questioner
Benny Benson
Viewed
11
Swati 2020-11-30 01:28:22

你可以session使用<c:if></c:if>以下方法检查的值是否不为空

 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
   Derzeitiges Budget: ${budget} 
  <c:if test="${empty budget}">
    50 //will get print only if conditon is true
  </c:if>
     

然后,在你的后端(servlet)中,你可以执行以下操作:

String gluecksZahlen = request.getParameter("eingabe");
HttpSession session = request.getSession();
//check if seesion is null
if (request.getServletContext().getAttribute("budget") == null) {
  //set default 
  session.setAttribute("budget", "45");
} else {
  //get value from session
  String budgetZwei = (String) request.getServletContext().getAttribute("budget");
  int sessionGuthaben = Integer.parseInt(budgetZwei);
  sessionGuthaben = sessionGuthaben - 5;
  String budgetInt = Integer.toString(sessionGuthaben);
  session.setAttribute("budget", budgetInt);
}

request.getRequestDispatcher("index.jsp").forward(request, response);