繁体   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