2013-11-23 233 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

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