java - java变量的奇怪行为

标签 java javascript jsp if-statement

我遇到了一种我无法解释的奇怪行为。这是我的 JSP 页面代码

<%@ page contentType="text/html; charset=iso-8859-1" language="java" import="java.sql.*,java.util.*" errorPage="" %>   
<%
String qid = request.getParameter("qid");
int qno;
int choice = 0;
if(qid==null)
qno = 1;
else
qno = Integer.parseInt(qid);
%>
<script>
    function f1()
    {
      var check;
    if(document.getElementById('r1').checked||document.getElementById('r2').checked||document.getElementById('r3').checked||document.getElementById('r4').checked)
    {   
        check = true;
        if(document.getElementById('r1').checked){
        <% choice = 1; %>
        }
        else if(document.getElementById('r2').checked){
        <% choice = 2; %>
        }
        else if(document.getElementById('r3').checked){
            <% choice = 3; %>
        }
        else {
          <% choice = 4; %>
        }
    }
    else{
        alert("Select an answer");
        check = false;
    }
     if(check){

    <%
    out.println("document.form1.action=\"starttest.jsp?qid="+qno+"&choice="+choice+"\"");
    %>
    document.form1.method="post";
    document.form1.submit();
    }
    }
</script>
<form id ="form1" name="form1" method="post" action="">
<%
try{
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost/examination?" +"user=root&password=nawed");
PreparedStatement ps=conn.prepareStatement("select question_text from question_master where question_id=?");
ps.setInt(1,qno);
ResultSet rs=ps.executeQuery();
while(rs.next()){
out.println("1><B>"+rs.getString(1)+"</B><br/>");
}
ps=conn.prepareStatement("select choice_1,choice_2,choice_3,choice_4,answer from multichoice_question where ques_id=?");
ps.setInt(1,qno);
rs= ps.executeQuery();
while(rs.next()){
  session.setAttribute("pans",rs.getString(5));
%>
<input type="Radio" name="radio" id="r1"/><%=rs.getString(1)%><br/>
<input type="Radio" name="radio" id="r2"/><%=rs.getString(2)%><br/>
<input type="Radio" name="radio" id="r3"/><%=rs.getString(3)%><br/>
<input type="Radio" name="radio" id="r4"/><%=rs.getString(4)%><br/>
<input type="button" name="button" value="Submit" onclick="f1()"/>
<%
}
ps.close();
rs.close();
}catch(Exception e){}
%>
</form>
</body>
</html>

问题是我每次在查询字符串中都会得到选择值4,但有趣的是,当我使用javaScript变量时,问题就会解决,例如:

<script>
    function f1()
    {
      var check;
    if(document.getElementById('r1').checked||document.getElementById('r2').checked||document.getElementById('r3').checked||document.getElementById('r4').checked)
    {   var choice;
        check = true;
        if(document.getElementById('r1').checked){
         choice = 1;
        }
        else if(document.getElementById('r2').checked){
         choice = 2;
        }
        else if(document.getElementById('r3').checked){
             choice = 3;
        }
        else {
           choice = 4; 
        }
    }
    else{
        alert("Select an answer");
        check = false;
    }
     if(check){

    <%
    out.println("document.form1.action=\"starttest.jsp?qid="+qno+"&choice=\"+choice");
    %>
    document.form1.method="post";
    document.form1.submit();
    }
    }
</script>

我无法解释这种奇怪的行为。如果有人能以简单的方式解释这一点,那将非常有帮助:)

最佳答案

JavaScript 在客户端运行。 Java 在应用程序/Web 服务器上运行。

将 JSP 视为输出客户端文档(HTML、JavaScript、CSS 等)的大型 Java 方法。

因此,在下面的代码片段中:

    if(document.getElementById('r1').checked){
    <% choice = 1; %>
    }
    else if(document.getElementById('r2').checked){
    <% choice = 2; %>
    }
    else if(document.getElementById('r3').checked){
        <% choice = 3; %>
    }
    else {
      <% choice = 4; %>
    }

这 4 行顺序执行。您可以查看编译后的 JSP 代码来验证这一点。

choice = 1;
choice = 2;
choice = 3;
choice = 4;

因此,选择最终将是4。if语句是JavaScript,浏览器将执行它,与Java逻辑无关。

关于java - java变量的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20164260/

相关文章:

Java-高效地执行 .setBounds(int, int, int, int);

javascript - d3.js 树状图新数据不渲染

java - 将 getGenerateKeys 传递到下一页

java - 将属性设置到 JSP PageContext 中,以便在过滤器中的 EL 中使用

java - Struts2 不适用于带注释的操作

Java gettext + 添加数字

java - 项目 bootspring v1 还是 v2

javascript - jquery多次输入数字字段求和值

javascript - Angular 服务返回对象?

java - 通过 JDBC 查询登录时出现 NullPointerException 错误