我试图在用户输入掷骰子的数字后显示输出,但无法调用我放入鳄鱼标签中的计算(<% %>)。我该怎么做?
这是我的代码:
<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>
最佳答案
根据您的第一个请求,页面加载时没有 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 语句包围在 block 中,因此如果请求参数 dicenum
是 null
Java 不会评估包围的 block 。
<%
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>
关于java - jsp(java)关于掷骰子的编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45416312/