簡體   English   中英

(MVC計算器)如何保持從index.jsp中選擇一個選項多少次的值?

[英](MVC Calculator) How to maintain the value of how many times an option from index.jsp is selected?

我的index.jsp的主體代碼:

    1st Number: <input type="first" name="num1" size="15"required>
                <select name="operator" size="1">
                <option>+
                <option>-
                <option>*
                <option>/
                </select>
    2nd Number: <input type="second" name="num2" size="15"required>

我的模型(CalcClass.java)中的代碼:

public int getAdd() {
            int a = 0;
    if(operator.equals("+"))
    {
        a++;
    }
    return a;
}
        public int getSubtract() {
            int s = 0;
    if(operator.equals("-"))
    {
        s++;
    }
    return s;
}
            public int getMultiply() {
            int m = 0;
    if(operator.equals("*"))
    {
        m++;
    }
    return m;
}
                public int getDivide() {
            int d = 0;
    if(operator.equals("/"))
    {
        d++;
    }
    return d;
}

我的Servlet(CalcServlet.java)的代碼:

        int add = cc.getAdd();
        int minus = cc.getSubtract();
        int multiply = cc.getMultiply();
        int divide = cc.getDivide();
        request.setAttribute("a", add);
        request.setAttribute("s", minus);
        request.setAttribute("m", multiply);
        request.setAttribute("d", divide);

        RequestDispatcher view = request.getRequestDispatcher("result.jsp");
        view.include(request, response);           

我的result.jsp的代碼:

       String add = String.valueOf(request.getAttribute("a"));
        String s = String.valueOf(request.getAttribute("s"));
        String m = String.valueOf(request.getAttribute("m"));
        String d = String.valueOf(request.getAttribute("d"));


            out.print(" + " + " = " + add);

            out.print(" - " + " = " + s);

            out.print(" * " + " = " + m);

            out.print(" / " + " = " + d);

           <a href ="index.jsp" >BACK</a>

我的問題是我只能在我的result.jsp中按BACK鏈接(href = index.jsp)轉到另一個提交按鈕后,才從第一次單擊提交按鈕開始計算使用的選項(操作員)從我的第一次點擊中重置為0。

我可以看到一個可能的錯誤是:您已經在方法中初始化了int變量 假設getAdd()方法。 因此,每次調用getAdd()方法時,變量“ a”都將設置為0,並且它將覆蓋先前的值。

此錯誤對於所有方法也相同。

您應該將那些變量聲明為類的“實例變量”,而不是method內部的局部變量

更正並再次檢查。 希望能幫助到你。

你說 :

在我的result.jsp中按下我的BACK鏈接(href = index.jsp)后,轉到另一個提交按鈕

我可以注意到您從頁面移動到另一個頁面,並且參數的范圍是請求范圍,因為您輸入了:

        request.setAttribute("a", add);
        request.setAttribute("s", minus);
        request.setAttribute("m", multiply);
        request.setAttribute("d", divide);

因此,當您移動到另一個頁面時,該值將被銷毀,您需要使用會話范圍來執行此操作

 request.getsession().setattribute("a", add);
 request.getsession().setattribute("s", minus);
 request.getsession().setattribute("m", multiply);
 request.getsession().setattribute("d", divide);

現在,如果您移至index.jsp並調用例如

${a}

您會找到合適的價值

你說:

第一次單擊時計數的option(operator)的值重置為0以解決此問題,我建議:

1 /值被破壞,並且方法getAdd()例如將a初始化為0,您必須將其更改為(以及b,c,d)為類的參數

public class CalcClass{
private int a=0; 
//...
}

2 /在index.jsp中,將input(a,b,c,d)的值更改為。

<input type="text" name="a" value="${a}"/>
......

您的代碼中有很多問題,還有一些重要的事情沒有向我們展示,我希望這會幫助您解決一些問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM