2013-11-23 240 views
0

我遇到了一个奇怪的行为,我无法解释。这里是我的JSP页面代码
奇怪行为java变量

<%@ 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,每次在查询字符串但intrestingly问题得到解决当我使用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> 

我无法解释这种奇怪的行为。如果有人可以用简单的方式解释这个问题,这将会非常有帮助:)

+3

它并不平坦,你正在混淆JavaScript和Java。在渲染页面时,Java线条​​被执行,在执行JavaScript之前。 – Darkhogg

回答

1

JavaScript运行在cl客户端。 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逻辑无关。

+0

我懂了...谢谢你:) –