私はJSPテクノロジーを学び始めたばかりで、壁にぶつかりました。
<%!のメソッドからHTMLをどのように出力しますか? ...%> JSP宣言ブロック?
これは機能しません:
<%!
void someOutput() {
out.println("Some Output");
}
%>
...
<% someOutput(); %>
サーバーは「アウト」がないと言います。
:文字列を返すこのメソッドでコードを書き換える方法は知っていますが、これを<%内で行う方法はあります! void(){}%>?最適ではないかもしれませんが、それでも面白いです。
ディレクティブ内で「out」変数(または他の「事前宣言済み」スクリプトレット変数)を使用することはできません。
JSPページはWebサーバーによってJavaサーブレットに変換されます。たとえば、Tomcat内では、スクリプトレット(「<%」で始まる)内のすべてが、すべての静的HTMLとともに、 1つの巨大なJavaメソッドは、「out」と呼ばれるJspWriterインスタンスにページを1行ずつ書き込む。これが、スクリプトレットで「out」パラメーターを直接使用できる理由です。一方(「<%!」で始まる)は、個別のJavaメソッドとして変換されます。
例として、非常に単純なページ(foo.jspと呼びましょう):
<html>
<head/>
<body>
<%!
String someOutput() {
return "Some output";
}
%>
<% someOutput(); %>
</body>
</html>
最終的には次のようになります(明確にするために多くの詳細は無視されます)。
public final class foo_jsp
{
// This is where the request comes in
public void _jspService(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
// JspWriter instance is gotten from a factory
// This is why you can use 'out' directly in scriptlets
JspWriter out = ...;
// Snip
out.write("<html>");
out.write("<head/>");
out.write("<body>");
out.write(someOutput()); // i.e. write the results of the method call
out.write("</body>");
out.write("</html>");
}
// Directive gets translated as separate method - note
// there is no 'out' variable declared in scope
private String someOutput()
{
return "Some output";
}
}
<%!
private void myFunc(String Bits, javax.servlet.jsp.JspWriter myOut)
{
try{ myOut.println("<div>"+Bits+"</div>"); }
catch(Exception eek) { }
}
%>
...
<%
myFunc("more difficult than it should be",out);
%>
これを試して、それは私のために働いた!
これが役立つと思います:
<%!
String someOutput() {
return "Some Output";
}
%>
...
<%= someOutput() %>
とにかく、ビューにコードを含めることは得策ではありません。
あなたがする必要があるのは、パラメータとしてJspWriterオブジェクトをメソッドに渡すことです。
void someOutput(JspWriter stream)
次に、それを経由して呼び出します:
<% someOutput(out) %>
ライターオブジェクトは_jspService内のローカル変数であるため、ユーティリティメソッドに渡す必要があります。同じことは、他のすべての組み込み参照(要求、応答、セッションなど)にも当てはまります。
何が起こっているのかを見るのに最適な方法は、Tomcatをサーバーとして使用し、「jsp」ページから生成された「.Java」ファイルの「work」ディレクトリにドリルダウンすることです。または、weblogicでは、「weblogic.jspc」ページコンパイラを使用して、ページが要求されたときに生成されるJavaを表示できます。
簡単な代替手段は次のとおりです。
<%!
String myVariable = "Test";
pageContext.setAttribute("myVariable", myVariable);
%>
<c:out value="myVariable"/>
<h1>${myVariable}</h1>
Jspコード内で任意の方法で変数を単純に使用できます
次のようなことができます:
<%!
String myMethod(String input) {
return "test " + input;
}
%>
<%= myMethod("1 2 3") %>
これにより、test 1 2 3
がページに出力されます。
それに答えるには遅すぎるが、これは他の人を助ける
<%!
public void printChild(Categories cat, HttpServletResponse res ){
try{
if(cat.getCategoriesSet().size() >0){
res.getWriter().write("") ;
}
}catch(Exception exp){
}
}
%>