2009-04-27 27 views
30

मेरे पास एक जेएसपी पृष्ठ टॉमकैट 5.5 पर चल रहा है।जेएसपी: ईएल अभिव्यक्ति का मूल्यांकन नहीं किया गया है

<c:forEach var="i" begin="1" end="10" step="1"> 
    <c:out value="${i}" /> 
    <br /> 
</c:forEach> 

उत्पादन मैं हो रही है:

${i} 
${i} 
${i} 
${i} 
${i} 
${i} 
${i} 
${i} 
${i} 
${i} 

मैं बाहर काम नहीं कर सकते क्यों foreach पाश काम कर रहा है लेकिन उत्पादन नहीं कर रहा है मैं निम्नलिखित कोड है। कोई भी मदद दे सकता है कोई भी महान होगा।

उत्तर

62

मुझे पता है कि यह डिफ़ॉल्ट रूप से चालू होना चाहिए, लेकिन मैं बार-बार पृष्ठों पर चलता हूं (या यहां तक ​​कि वही पृष्ठ जो व्यवहार बदलता है) जहां ईएल प्रसंस्करण नहीं होता है। इस तरह के किसी भी पृष्ठों के शीर्ष करने के लिए निम्न जोड़ना समस्या को हल करना चाहिए:

<%@ page isELIgnored="false" %> 

मैं हर पृष्ठ पर जोड़ क्योंकि यह चोट नहीं करता है, और मैं अभी भी मूल कारण है कि कभी कभी एक पेज का कारण बनता है पता नहीं है ईएल अभिव्यक्तियों की व्याख्या करना बंद करना।

+2

बिलाव 5.5 पर, देखते हैं दो संभावित कारण (केवल?): Web.xml में अवैध स्कीमा, या el- अनदेखा विन्यास विकल्प। –

+1

I (और अन्य) के पास एक पृष्ठ ठीक काम कर रहा है और, पृष्ठ पर कुछ बदलने के बाद (यानी, कुछ HTML जोड़ना), यह केवल ईएल अभिव्यक्तियों का मूल्यांकन करना बंद कर देता है। एकमात्र स्पष्टीकरण जो मैं साथ आ सकता हूं वह कहीं भी टॉमकैट में एक बग है, लेकिन इसे मैन्युअल रूप से सक्षम करने के बाद से बहुत गहरी खुदाई करने योग्य नहीं है (ऊपर दिए गए कोड के माध्यम से) समस्या का समाधान करता है। – RHSeeger

+4

यदि आपने अपना वेबपैप मैवेन आर्केटाइप के साथ बनाया है तो सही उत्तर यह है: http://stackoverflow.com/a/25372735/20654 – OscarRyz

0

संभावित कारणों से Javascript String.replace(/\$/,str) works weirdly in jsp file पर मेरा उत्तर देखें।

लंबा उत्तर: $ {i} तथाकथित 'अभिव्यक्ति भाषा' में अभिव्यक्ति है। कभी-कभी, अभिव्यक्ति भाषा अक्षम की जा सकती है। संभावित कारणों के लिए उपर्युक्त उत्तर देखें, और इसे कैसे सक्षम करें।

0

tomcat6 का उपयोग करें। इसे web.xml में ईएल के लिए किसी भी कॉन्फ़िगरेशन की आवश्यकता नहीं है।

+2

टोमकैट 5.5 को वेब.एक्सएमएल में ईएल के लिए किसी भी कॉन्फ़िगरेशन की आवश्यकता नहीं है। टॉमकैट 5.0 भी नहीं है। यदि आपको इसके साथ कोई समस्या है, तो यह कहीं और स्थित है। – BalusC

38

मुझे बस यही समस्या थी और यह पता लगाने की कोशिश कर रहा था कि क्या गलत था।

मैंने स्क्रैच से कई वेब ऐप्स विकसित किए हैं। अचानक यह क्यों सहयोग नहीं कर रहा था?

इस बार एक अंतर था जब मैंने परियोजना संरचना उत्पन्न करने के लिए मेवेन वेबपैप आर्केटाइप का उपयोग किया था। एक बार जब मुझे एहसास हुआ कि मेरी समस्या के रूप में, मुझे यकीन है कि मैं इस सवाल का जवाब था कि

<!DOCTYPE web-app PUBLIC 
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
"http://java.sun.com/dtd/web-app_2_3.dtd" > 

<web-app> 
    <display-name>Archetype Created Web Application</display-name> 
</web-app> 

: यह एक web.xml फ़ाइल है कि इस तरह देखा बनाया। तो मैंने अपने 2.5 वेब.एक्सएमएल हेडर में से एक की प्रतिलिपि बनाई, पुनर्निर्मित और पुनर्निर्मित किया। कोई सिगार नहीं। विश्वास नहीं कर सका कि समस्या नहीं थी। परियोजना को साफ किया, टोमकैट को फिर से शुरू किया। नहीं।

आरएचसीगर के जवाब ने मुझे <% @ पृष्ठ isELIgnored = "false"%> डालने का प्रयास करने का नेतृत्व किया। इसने समस्या को हल किया। लेकिन मैं अभी भी जानना चाहता था कि क्यों शुरू करने के लिए एल को अनदेखा करना शुरू कर दिया।

मुझे लगा कि एल को मेरे web.xml के साथ कुछ गलत होने के कारण अनदेखा किया जा रहा था, इसलिए मैंने इसे किसी अन्य वेबैप के वेब.एक्सएमएल की तुलना में बारीकी से निरीक्षण किया जो मुझे पता था कि ठीक काम किया गया था। कोई उल्लेखनीय मतभेद नहीं।

तब मैं अपने JSP से <% @ page isELIgnored = "false"%> हटाया, और पुन: वितरित, यह मानते हुए एल फिर से मूल्यांकन नहीं किया जाएगा, लेकिन मेरे आश्चर्य करने के लिए बहुत, एल ठीक से मूल्यांकन किया गया था!

फिर, यह पता लगाना कि यह किसी प्रकार की कैशिंग समस्या होनी चाहिए, मैं समस्या को फिर से बनाने के लिए web.xml में अपने परिवर्तनों को कम करता हूं। मैंने फिर से तैनात किया, लेकिन फिर भी खराब वेब का मूल्यांकन किया जा रहा था, यहां तक ​​कि खराब web.xml के साथ भी। तब मैंने अपनी पूरी परियोजना को साफ किया (मैं एक विस्फोटित तैनाती का उपयोग कर रहा हूं), विस्फोटित निर्देशिका को दूर कर रहा हूं और इसे पुनर्निर्माण कर रहा हूं। फिर मैंने टोमकैट को फिर से शुरू किया। फिर भी, खराब वेब.एक्सएमएल के बावजूद एल को सही तरीके से मूल्यांकन किया जा रहा था।

अंततः यह मेरे सामने आया।मैंने बस जेएसपी में किसी स्थान पर एक जगह जोड़ा, इसे दोबारा बनाया, और पेज को रीफ्रेश किया। बिंगो! अब एल का मूल्यांकन नहीं हो रहा था।

तो समस्या वेब.xml के साथ समस्या थी। यह इस तथ्य से और जटिल होगा कि जब तक वे बदल नहीं गए थे तब तक जेएसपी को फिर से तैयार नहीं किया जा रहा था। यह सुनिश्चित करने के लिए कि क्या जेएसपी को पुन: सम्मिलित करने की आवश्यकता है या नहीं, यह सुनिश्चित करने के लिए टॉमकैट एमडी 5 योग का उपयोग करता है या नहीं। एक और संभावना यह है कि मैं टाइल्स का उपयोग कर रहा हूं, जो मुझे पता है कि एक कैशिंग तंत्र है, लेकिन मैं उम्मीद नहीं करता कि टॉमकैट फिर से शुरू हो जाए।

वैसे भी, जब तक आप वेब.एक्सएमएल को ठीक करने के बाद अपने जेएसपी को संशोधित नहीं करते हैं, तो सभी दांव इस बात से दूर हैं कि ईएल फिर से काम करना शुरू कर देगा या नहीं। उम्मीद है कि यह किसी और को सिरदर्द बचाता है। मुझे कोई दिलचस्पी है अगर कोई मुझे बता सकता है कि क्या यह जेएसपी या जेएसपी के आउटपुट को कैश करने वाले जेएसपी या टाइल्स को दोबारा नहीं कर रहा है। मुझे पूरा यकीन है कि यह पुन: संकलित है, क्योंकि संकलन समय पर जब जेएसपी को यह पता लगाना चाहिए कि $ {} el अभिव्यक्तियों के साथ क्या करना है, है ना? टाइल्स वास्तव में कैश नहीं कर सकता जो एल अभिव्यक्तियों में प्रतिस्थापित हो जाता है, अन्यथा सभी प्रकार की समस्याएं उत्पन्न होती हैं।

+0

बहुत बहुत धन्यवाद, यह वही है जो मैंने किया है - आर्केटाइप से बनाया गया है, और ईएल और जेएसटीएल सभी काम नहीं कर रहे हैं, भले ही जेएसपी फाइल पहले से ही काम कर रहे कुछ पिछले ऐप के समान कोड का उपयोग कर रही थी। Web.xml नेमस्पेस को फिक्स्ड, पुनरारंभ किया गया, अभी भी काम नहीं कर रहा है; अंत में जेएसपी संशोधित, और क्रमबद्ध! –

+0

यह टोमकैट जेएसपी को दोबारा नहीं बना रहा था। यह जेएसपी फ़ाइल के अंतिम संशोधित ट्रैक करता है - नए संस्करण भी निर्भरताओं के अंतिम संशोधित समय को ट्रैक करते हैं। इन्हें कॉन्फ़िगर करने योग्य आवृत्ति पर चेक किया जाता है (आमतौर पर मेमोरी परोसने पर 5 सेकंड) और यदि कोई परिवर्तन पता चला है तो पुन: संकलन ट्रिगर किया जाता है। .java फ़ाइल टॉमकैट की कार्य निर्देशिका में स्थित हो सकती है और फिर से शुरू हो जाएगी। –

+0

@kevinmrohr आपके विस्तृत प्रयोग और उत्तर के लिए बहुत बहुत धन्यवाद। – smwikipedia

1

केविन के लिए भी इसी तरह की समस्या थी, मैंने वेबपैप के साथ शुरू करने के लिए मेवेन का उपयोग किया लेकिन जेएसपी में अभिव्यक्तियों का मूल्यांकन करने के साथ कोई खुशी नहीं - मुझे DOCTYPE हेडर को हटाना पड़ा - अब सभी के साथ खेलने के बिना अच्छा है अनगिनत बिट - मैवेन वेब.एक्सएमएल उत्पन्न करता है 2.3 के लिंक जो पीटर ने कहा है कि ईएल डिफ़ॉल्ट रूप से अक्षम है

9

वेब.एक्सएमएल में प्रासंगिक नेमस्पेस को शामिल करना सुनिश्चित करें। वैसे ही जैसे

<web-app xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
         http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    version="3.0" 
    metadata-complete="true"> 

यह मेरे लिए यह तय कुछ के साथ

<web-app> 

को बदलने के लिए प्रयास करें। आप टॉमकैट इंस्टॉलेशन के साथ आने वाले उदाहरण ऐप्स में अपने टोमकैट इंस्टेंस के लिए सही नेमस्पेस पा सकते हैं।

+0

काम करता है, और मेरा दिन बचाया! : डी – Philipp

0
नियंत्रक से

:

@RequestMapping(value = "createcustomer",method = RequestMethod.GET) 
    public String customer(Model model) 
    { 
     Customer cus=new Customer(); 
     cus.setCustomerNumber("Test"); 
     model.addAttribute("customer",cus); 
     return "createcustomer"; 
    } 

देखें में:

<%@taglib uri="http://www.springframework.org/tags/form" prefix="form" %> 
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> 

<div class="cl">  
    <form:form commandName="customer" method="POST"> 

     <p>Name: <c:out value="${customer.CustomerNumber}"></c:out></p> 

    </form:form> 
<div> 

आउटपुट:

Name: Test 
15

यह web.xml में हैडर कि Maven नीचे समस्या

का कारण बनता है है उत्पन्न हेडर बंद हो जाता है ईएल evaled से।

<!DOCTYPE web-app PUBLIC 
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
"http://java.sun.com/dtd/web-app_2_3.dtd" > 
<web-app> 

नीचे हेडर eval के ईएल का उपयोग कर।

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
+0

जो मेरा दिन बचाता है! धन्यवाद! – Maigret

+0

gr8 ...... धन्यवाद –

+0

यह समाधान काम कर रहा है। –

2

इच्छुक हों, JSP 2.0 के लिए समान XML वाक्यविन्यास है:

<jsp:directive.page isELIgnored="false"/> 
संबंधित मुद्दे