2011-09-26 38 views
1

用JSP/bean動作讓我的腳變得溼潤。我得到在我的輸出頁面上,處理JSP頁面/foo/output.jsp的14行時發生異常。 java文件編譯好了。使用bean的表格輸出

的Input.jsp

<p>First Number: <input type="text" name="first" value="" /></p> 
<p>Second Number: <input type="text" name="second" value="" /></p> 
<p>Action: <select name="compu"> 
       <option value="1">+</option> 
       <option value="2">-</option> 
       <option value="3">*</option> 
       <option value="4">/</option> 
      </select></p> 

<input type="submit" /> 
</form> 

output.jsp的

<%@ page contentType="text/html; charset=utf-8" language="java" import="java.util.*" errorPage="" %> 

<jsp:useBean id="foo" class="stuff.DerInput" scope="page" /> 
<jsp:setProperty name="foo" property="*" /> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Untitled Document</title> 
</head> 

<body> 
<jsp:getProperty name="foo" property="calculation" /> 
<p>The result: <%= foo.getCalculation() %></p> 

</body> 
</html> 

DerInput.Java

package stuff; 

public class DerInput { 
    int first, second, compu, theresult; 
    String notation; 

    public void setFirst(int value) 
    { 
     first = value; 
    } 

    public void setSecond(int value) 
    { 
     second = value; 
    } 

    public void setCompu(int value) 
    { 
     compu = value; 
    } 

    public String getCalculation() { 

     switch (compu) { 
      case 1: 
       theresult = first + second; 
       notation = "+"; 
       break; 
      case 2: 
       theresult = first - second; 
       notation = "-"; 
       break; 
      case 3: 
       theresult = first * second; 
       notation = "*"; 
       break; 
      case 4: 
       theresult = first/second; 
       notation = "/"; 
       break; 
     } 

     return first + " " + notation + " " + second + " = " + theresult; 
    } 
} 
+0

你忘了共享例外(包含答案)。請編輯您的問題以包含它。 – BalusC

+0

你是說switch語句必須總是有默認的異常情況? –

+0

不,你有一個異常,但是你沒有在你的問題中包含它和它的堆棧跟蹤。有了它,你的問題將更容易回答,而無需根據發佈的代碼進行猜測(反過來可能有許多可能的問題原因),因爲該例外包含有關問題原因的詳細信息,因此隱含地包含答案(你知道,一旦原因被理解*,解決方案本身就會說明問題)。 – BalusC

回答

2

瞧,

<jsp:getProperty name="foo" property="calculation" /> 
<p>The result: <%= foo.getCalculation() %></p> 

你期待的是,頁面範圍的bean ${foo}可在小腳本範圍<% foo %>爲好。這不是真的。他們不共享相同的變量範圍。這隻會導致在getCalculation()呼叫NullPointerException,因爲<% foo %>null。使用EL代替。

<p>The result: ${foo.calculation}</p> 

(注意:<jsp:getProperty>線是多餘的在這裏,所以我刪除它)

+0

我必須改變我的java文件以輸出爲函數調用而不是EL?或者,我是否將頁面的範圍更改爲更廣泛的內容,如請求? –

+0

你不想這樣做。從JSP 2.0開始,Scriptlets被認爲是一種不好的做法(幾乎十年前就已經出現)。你應該儘量避免它們。但是,爲了學習目的,'pageContext.findAttribute()'會在* scriptlet *中爲你找到EL變量。另見http://stackoverflow.com/tags/el/info和http://stackoverflow.com/questions/3177733/how-to-avoid-java-code-in-jsp-files – BalusC

+0

感謝您的澄清。這表明我需要多少錢來了解發生了什麼事情。 –