2008-09-26 10 views
30

मैंने अभी जेएसपी तकनीक सीखना शुरू किया, और एक दीवार में आया।जेएसपी <%! ... %> ब्लॉक से एचटीएमएल कैसे आउटपुट करें?

<% में किसी विधि से HTML को आउटपुट कैसे करते हैं! ...%> जेएसपी घोषणा ब्लॉक?

यह काम नहीं करता:

<%! 
void someOutput() { 
    out.println("Some Output"); 
} 
%> 
... 
<% someOutput(); %> 

सर्वर वहाँ बाहर ” कोई “ कहते हैं।

यू: मुझे पता है कि इस विधि के साथ एक स्ट्रिंग लौटने के साथ कोड को फिर से लिखना है, लेकिन <% के अंदर ऐसा करने का कोई तरीका है! शून्य() {}%>? हालांकि यह गैर-इष्टतम हो सकता है, यह अभी भी दिलचस्प है।

उत्तर

27

आप निर्देशों के अंदर 'आउट' चर (और न ही किसी अन्य "पूर्ववर्ती" स्क्रिप्टलेट चर का उपयोग नहीं कर सकते हैं।

जेएसपी पृष्ठ का अनुवाद आपके वेबसर्वर द्वारा जावा सर्वलेट में किया जाता है। उदाहरण के लिए, स्क्रिप्टलेट्स के अंदर सबकुछ (जो "<%" शुरू करता है), सभी स्थैतिक एचटीएमएल के साथ, एक विशाल जावा विधि में अनुवाद किया जाता है जो आपके पेज को लाइन से लाइन करता है, जिसे "आउट" नामक जेएसपीवाइटर उदाहरण में लिखा जाता है। यही कारण है कि आप सीधे "स्क्रिप्टलेट्स" पैरामीटर में "आउट" पैरामीटर का उपयोग कर सकते हैं। निर्देश, दूसरी ओर (जो "<%" से शुरू होता है)) अलग जावा विधियों के रूप में अनुवादित हो जाते हैं।

उदाहरण के लिए, एक बहुत ही सरल पेज (यह 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"; 
    } 
} 
+0

आपके अच्छे उत्तर के लिए धन्यवाद, हालांकि यह वह नहीं है जिसे मैं ढूंढ रहा हूं। – ansgri

+3

कुछ आउटपुट को कॉल आउट.write कथन में नहीं रखा जाएगा जब तक आप अभिव्यक्ति वाक्यविन्यास <%= %> का उपयोग नहीं करते। जब आप स्क्रिप्टलेट सिंटैक्स का उपयोग करते हैं तो यह केवल इनलाइन डाला जाता है। –

+1

परडोजा का जवाब मेरे लिए काम करता था लेकिन ऐसा नहीं करता है। – mr5

8

मैं इस में मदद मिलेगी लगता है:

<%! 
    String someOutput() { 
    return "Some Output"; 
    } 
%> 
... 
<%= someOutput() %> 

वैसे भी, यह एक दृश्य में कोड करने के लिए एक अच्छा विचार नहीं है।

9

तुम सब करने की ज़रूरत है एक पैरामीटर के रूप में अपने विधि में JspWriter वस्तु पारित यानी

void someOutput(JspWriter stream) 

तब के माध्यम से इसे कहते है:

<% someOutput(out) %> 

लेखक वस्तु _jspService अंदर एक स्थानीय चर रहा है तो आपको इसे अपनी उपयोगिता विधि में पारित करने की आवश्यकता है। वही सभी संदर्भित संदर्भों (जैसे अनुरोध, प्रतिक्रिया, सत्र) के लिए लागू होगा।

क्या चल रहा है यह देखने का एक शानदार तरीका है कि अपने सर्वर के रूप में टोमकैट का उपयोग करें और अपने 'jsp' पृष्ठ से उत्पन्न '.java' फ़ाइल के लिए 'कार्य' निर्देशिका में ड्रिल करें। वैकल्पिक रूप से वेबलॉगिक में आप जावा को देखने के लिए 'weblogic.jspc' पृष्ठ कंपाइलर का उपयोग कर सकते हैं जो पेज अनुरोध होने पर उत्पन्न होगा।

12
<%! 
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); 
%> 

इसे आजमाएं, यह मेरे लिए काम करता है!

-1

आप कुछ इस तरह कर सकते हैं:

<% 

out.print("<p>Hola</p>");  
out.print("<p>Cómo estás?</p>"); 

%> 
+1

प्रश्न विशेष रूप से प्रश्न चिह्न के साथ '<%! %>' के बारे में है। – ansgri

3

आप कुछ इस तरह कर सकते हैं:

<%! 
String myMethod(String input) { 
    return "test " + input; 
} 
%> 

<%= myMethod("1 2 3") %> 

पृष्ठ पर हो जाएगा ताकि उत्पादन test 1 2 3

6

एक सामान्य विकल्प निम्नलिखित होगा:

<%! 
    String myVariable = "Test"; 
    pageContext.setAttribute("myVariable", myVariable); 
%> 

<c:out value="myVariable"/> 
<h1>${myVariable}</h1> 

, जिसे आप बस चर किसी भी तरह से jsp कोड

1

बहुत देर हो चुकी भीतर यह जवाब देने के लिए इस्तेमाल कर सकते हैं, लेकिन यह मदद दूसरों

<%! 
    public void printChild(Categories cat, HttpServletResponse res){ 
     try{ 
      if(cat.getCategoriesSet().size() >0){ 
       res.getWriter().write("") ; 
      } 
     }catch(Exception exp){ 

     } 
    } 

%> 
संबंधित मुद्दे