سؤال

هذا السؤال سبق الجواب هنا:

لدي صفحة JSP تعمل على هر 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 حلقة العمل ولكن الإخراج لا تعمل.أي مساعدة أي أحد يمكن أن تعطي ستكون كبيرة.

هل كانت مفيدة؟

المحلول

أعلم أنه من المفترض أن يكون افتراضيا ، ولكن أركض عبر صفحات والآن مرة أخرى (أو حتى في نفس الصفحة التي تغييرات السلوك) حيث ش المعالجة لا يحدث.إضافة التالية إلى أعلى أي من هذه الصفحات أن حل المشكلة:

<%@ page isELIgnored="false" %> 

إضافة إلى كل صفحة لأنه لا يضر ولا زلت لا أعرف السبب الذي يسبب أحيانا صفحة لوقف تفسير EL التعبيرات.

نصائح أخرى

لقد حصلت على هذه المشكلة نفسها وقضيت في محاولة لمعرفة ما كان خطأ.

لقد طورت الكثير من تطبيقات الويب من نقطة الصفر. لماذا فجأة كان هذا واحد لا يتعاون؟

كان هناك اختلاف واحد هذه المرة استخدمت النمط الأوسط WebApp Maven WebApp لتوليد هيكل المشروع. أنشأ ملف Web.xml الذي بدا هذا:

<!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>

بمجرد أن أدركت أنه بمثابة مشكلتي، كنت متأكدا من أنني حصلت على الجواب. لذلك قمت بنسخ أحد رؤوس 2.5 Web.xml، وإعادة بنائها، وإعادة نشرها. لا السيجار. لا أصدق أن ذلك لم يكن المشكلة. تنظيف المشروع، أعيد تشغيل Tomcat. لا.

قادت إجواب RhseGer لي في محاولة وضع <٪ @ الصفحة Iselignored = "False"٪>. التي حل المشكلة. لكن ما زلت أرغب في معرفة سبب تجاهل EL بالبدء.

أحسب أن يتم تجاهل EL بسبب شيء خاطئ في Web.xml الخاص بي، لذلك فقد تفتيشته بشكل وثيق مقارنة مع Web.xml Web.xml الذي عرفته بشكل جيد. لا توجد فروق ملحوظة.

ثم قمت بإزالة <٪ @ الصفحة Iselignored = "False"٪> من بلدي JSP، وإعادة نشرها، على افتراض أن EL لن يتم تقييمها مرة أخرى، ولكن الكثير لدهشتي، تم تقييم EL غرامة!

بعد ذلك، يجب أن يكون هناك نوع من مشكلة التخزين المؤقتة، وأنا لانخفاض تغييراتي إلى Web.xml لإعادة إنشاء المشكلة. أعيد نشرها، ولكن لا يزال تم تقييم EL بشكل صحيح، حتى مع Bad Web.xml. ثم قمت بتنظيف مشروعي بالكامل (أنا أستخدم نشر انفجرت)، وفجر الدليل المتفجر وإعادة إنشاءه. ثم أعدت Tomcat. ومع ذلك، يبدو أن EL يبدو أن يتم تقييمه بشكل صحيح على الرغم من Bad Web.xml.

وأخيرا فجر لي. أضافت ببساطة مساحة إلى مكان ما في JSP، إعادة إلحاقها، وانتعاش الصفحة. بينغو! الآن لم يتم تقييم EL.

وبالتالي فإن المشكلة كنت مع web.xml. من شأنه أن تعقد حقيقة أن JSPs لم تحصل على إعادة ترجمة إلا إذا تغيرت. لست متأكدا مما إذا كان Tomcat يستخدم مبلغ MD5 ليقرر ما إذا كان يحتاج jsps إلى إعادة ترجمة أو ماذا. احتمال آخر هو أنني أستخدم البلاط، الذي أعرفه لديه آلية مخزئة للتخزين المؤقت، لكنني لا أتوقع أن ينجو من إعادة تشغيل Tomcat.

على أي حال، ما لم تقم بتعديل JSPS الخاص بك بعد إصلاح Web.xml، فإن جميع الرهانات مقطوعة حول ما إذا كان EL سيبدأ العمل مرة أخرى. نأمل أن يحفظ شخص آخر صداع. أنا مهتم أيضا إذا كان بإمكان أي شخص أن يقول لي ما إذا كان tomcat لا إعادة ترجمة JSPS أو البلاط التخزين المؤقت إخراج JSP. أنا متأكد من أنه recompile، لأنه في وقت الترجمة هو عندما يجب أن تضطر JSP لمعرفة ما يجب القيام به مع التعبيرات $ {} EL EL، أليس كذلك؟ لا يمكن أن تخب البلاط بالفعل ذاكرة التخزين المؤقتة التي يتم استبدالها في تعبيرات EL، وإلا فإن جميع أنواع المشكلات ستنشأ.

إنه رأس Web.xml الذي يسبب المشكلة

يقع أدناه رأس مينج الناتج عن إله من التقييم.

<!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>

استخدام أدناه رأس eve هو el.

<?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">

تأكد من تضمين مساحات الأسماء ذات الصلة في Web.xml. فقط حاول استبدال

<web-app>

مع شيء مثل

<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">

انها ثابتة بالنسبة لي. يمكنك العثور على مساحات الأسماء الصحيحة لمثيل Tomcat الخاص بك في تطبيقات المثال التي تأتي مع تثبيت Tomcat.

بالنسبة للمهتمين، فإن بناء جملة XML المكافئ ل JSP 2.0 هو:

<jsp:directive.page isELIgnored="false"/>

لقد استخدمت مشكلة مماثلة في كيفن، لقد استخدمت Maven للبدء في WebApp ولكن لا فرحة مع تقييم التعبيرات في JSP - اضطررت إلى إزالة رأس DocType - كل شيء جيد الآن دون اللعب مع Nevelignored Bit - Maven يولد Web.xml الذي يصل إلى 2.3 أيهما كما ذكر بيتر قد تعطيل EL

انظر جوابي في يعمل JavaScript String.Replace (/ $ /، Str) غريب في ملف JSP لأسباب محتملة.

إجابة أطول: $ {i} هو التعبير في ما يسمى "لغة التعبير". في بعض الأحيان، يمكن تعطيل لغة التعبير. انظر أعلاه إجابة لأسباب محتملة، وطرق كيفية تمكينها.

استخدام Tomcat6. لا يتطلب أي تكوين EL في Web.xml.

من تحكم:

@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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top