2015-09-23 22 views
0

我有一種方法,我拿了一個變量int b = 10 &我想在顯示方法中打印這個值 。我該怎麼做 ?如何在JSP中使用聲明標籤?

<%! 
int b=10; 
public void display() 
{ 
    out.print(b); 
} 
%> 

但它給錯誤,如「無法解決」。

+0

以及在哪裏「出'宣佈?在目前的腳本中聲明它(雖然腳本是不好的做法,不安全和過時) – smoggers

回答

4

腳本元素內service法執行,並且每次調用此方法來處理它需要創建自己的一套局部變量的不與service方法,它將處理不同要求的其他調用碰撞有一定的要求。其中一個局部變量是out

由於<%! ... %>負責在類級聲明代碼,因此它無法訪問局部變量service方法。

如果你真的需要訪問out,你可以將它傳遞給display方法參數一樣

public void display(JspWriter out) //javax.servlet.jsp.JspWriter 
{ 
    out.print(b); 
} 

您還可以創建其他的方法,該方法而不是被負責顯示,將返回要顯示的內容像

public int getB() 
{ 
    return b; 
} 

您可以在小腳本使用out<% out.print(getB()); %><%=getB()%>

但是you should avoid scriptlets

+0

是的,它的工作非常感謝。 –

+0

哈哈。嗯你是對的。等待.......... –

0

scriptlet與<%一起引入,而不是<%!此外,還有一些信息丟失。這是否運行在服務器內的JSP文件中,例如Tomcat?

應該定義「out」變量,因爲它是JSP中的標準預定義變量。

+0

如果你在'<% %>'而不是'<%! %>'中,則'out'被定義... ...並且是的,有'<%! %>'這樣的東西。 – developerwjk

0

無論放置在聲明標記內部,在JSP初始化階段都會被初始化。所以隱含對象「out」在這裏還不可用。

如果你真的需要輸出一些自己的方法中(在JSP類),你可以做這樣的:

<%! 
int b=10; 
public void display(HttpServletResponse res) { 
    try { 
     res.getWriter().write(b) ; 
    } catch (IOException e) { 
     // 
    } 
} 
%> 
在jsp

及更高版本:

<%= display(response) %> 
+0

異常存在的哈: –

+0

堆棧跟蹤:]與根源 org.apache.jasper.JasperException:無法編譯類JSP:23在jsp文件:在線路發生 錯誤/NewFile.jsp 的方法打印(boolean)在JspWriter類型中不適用於參數(void) –