2017-07-31 74 views
1

我想在用戶輸入滾動骰子的數字後顯示輸出,我不能調用我放入aligator標籤(<%%>)中的計算。我將如何做到這一點?jsp(java)關於滾動骰子的編碼

這是我的代碼:

<body> 

    <p>Note: Make sure the numbers are among the following: 4, 6, 8, 10, and 20.</p> 
    <form id="diceForm" name="diceForm" action=""> 
    <label>Enter your number here:</label> 
    <input type="number" name="dicenum" required='required' placeholder="Enter a number among 4, 6, 8, 10, and 20..."> 
    <br> 
    <input type="submit" value="submit"> 
    </form> 

    <% int num = Integer.parseInt(request.getParameter("dicenum")); 
    if (num == 4) 
     num = 1+(int)(Math.random()*4); 
    else if (num == 6) 
     num = 1+(int)(Math.random()*6); 
    else if (num == 8) 
     num = 1+(int)(Math.random()*8); 
    else if (num == 10) 
     num = 1+(int)(Math.random()*10); 
    else if (num == 20) 
     num = 1+(int)(Math.random()*20); 
    else 
     num = 0; 
    %> 
    <%= (num == 0)? "The number you've entered is out of range.": num %> 
    </body> 
+0

你打算怎麼處理你遇到的錯誤? –

回答

0

你沒有檢查請求參數是否是jsp和服務器可能的第一個負載期間空或不產生異常。按照一個替換的scriptlet代碼:

<% 
    if(request.getParameter("dicenum") != null) { 
%> 

<% 
int num = Integer.parseInt(request.getParameter("dicenum")); 
if (num == 4) 
    num = 1+(int)(Math.random()*4); 
else if (num == 6) 
    num = 1+(int)(Math.random()*6); 
else if (num == 8) 
    num = 1+(int)(Math.random()*8); 
else if (num == 10) 
    num = 1+(int)(Math.random()*10); 
else if (num == 20) 
    num = 1+(int)(Math.random()*20); 
else 
    num = 0; 
%> 
<%= (num == 0)? "The number you've entered is out of range.": num %> 
<% } %> 
1

關於第一個要求,當頁面加載存在請求沒有dicenum參數,除非你加載你的頁面是這樣的:http://localhost:8070/../page.jsp?decinum=20手動添加請求參數的URL。

當用戶提交經由<input type="submit" value="submit">的形式,如你的請求類型是GET(這是默認值),請求參數dicenum被附加到URL,從而形成URL http://localhost:8070/../page.jsp?decinum=value,其中value將與在表格中輸入的值取代。

因此第一個請求(第一頁面加載),當用戶沒有提交任何形式的值揭掉,也沒有請求參數dicenum,所以你得到的NullPointerException在這行

int num = Integer.parseInt(request.getParameter("dicenum")); 

,因爲它解釋到Integer.parseInt(null),爲request.getParameter("dicenum"解釋到null

你需要警惕的NullPointerException,圍繞塊的Java語句,所以如果請求參數dicenumnull Java將不評估包圍的塊。

<% 
    if(request.getParameter("dicenum") != null) { 
    %> 

    ... your Java statements 

    <% } %> 

另一種看法是,你是不必要的重複自己在if... else blocks可以改寫爲

if (num == 4 || num == 6 || num == 10 || num == 20){ 
     num = 1 + (Math.random()*num); 

再次,這是一個公正的建議

完整的代碼如下:

<body> 

    <p>Note: Make sure the numbers are among the following: 4, 6, 8, 10, and 20.</p> 
    <form id="diceForm" name="diceForm" action=""> 
    <label>Enter your number here:</label> 
    <input type="number" name="dicenum" required='required' placeholder="Enter a number among 4, 6, 8, 10, and 20..."> 
    <br> 
    <input type="submit" value="submit"> 
    </form> 

    <% 
    if(request.getParameter("dicenum") != null) { // Opening curly braces for NPE guard 
    %> 

<% 
int num = Integer.parseInt(request.getParameter("dicenum")); 

    if (num == 4 || num == 6 || num == 10 || num == 20){ 
     num = 1 + (Math.random()*num); 
    } else { 
    num = 0; 
    } 

%> 
<%= (num == 0)? "The number you've entered is out of range.": num %> 
<% } %>       // Closing curly braces for NPE guard 

</body>