JSTL forEach الوسم:مشاكل مع التعداد ، مع فهم كيف يجب أن تعمل

StackOverflow https://stackoverflow.com/questions/256910

  •  05-07-2019
  •  | 
  •  

سؤال

لقد شهدت بدلا من ذلك السلوك الغريب من JSTL forEach الوسم.

لدي بعض الفول يسمى SessionBean:

public class SessionBean {
  private Collection<MyObject> objects;
  public Collection<MyObject> getObjects() {return objects;}
  ...
}

بسيطة JSP صفحة مثل هذه:

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<body>
    <f:view>
        <h:form>
            <c:forEach var="myObject" items="#{SessionBean.objects}">
                <h:outputText value="#{myObject}" /> <br />
            </c:forEach>
        </h:form>
    </f:view>
</body>

و, أنها لا تعمل.Exeption القيت هو

javax.servlet.jsp.JspTagException: Don't know how to iterate over supplied "items" in <forEach>
        at org.apache.taglibs.standard.tag.common.core.ForEachSupport.toForEachIterator(ForEachSupport.java:255)
        at org.apache.taglibs.standard.tag.common.core.ForEachSupport.supportedTypeForEachIterator(ForEachSupport.java:219)
   ....

لماذا ؟
ثم تغيير items="#{SessionBean.objects}" البنود="${SessionBean.objects}", و هناك استثناء.باستثناء MyObjects ليست مطبوعة.

ثم قمت بنفس تغيير <h:outputText value="#{myObject}" />, و هو صالح قيمة هذه السمة.

وأخيرا استبدال JSF outputText الوسم فقط ${myObject} يعمل كما هو متوقع.

هل يمكن لأحد أن يفسر ما يحدث هنا في كل مرحلة من فضلك ؟

U: SessionBean يدار من قبل JSF و بالتأكيد تم إنشاؤها ، ينفذ بعض الإجراءات في الرأس.

القرار: المشكلة ثبت أن ذلك يعود إلى عدم التوافق بين JSTL و JSF في J2EE 1.4.التحول إلى J2EE 5 جعل الخيار الأول تعمل على ما يرام.

وذلك بفضل!

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

المحلول

هذا المادة يشرح الفرق بين موحدة ش و ش.هنا مقتطف

تقييم ش

تقييم ال يتم تصنيفها على أنها التقييم الفوري و المؤجل التقييم.تقييما فوريا يعني صفحة JSP تقييم التعبير عند عرض الصفحة.مع فورية تقييم كل القيم دائما للقراءة فقط.JSP ش تعبيرات تأخذ شكل ${imExpr}.JSP تعبيرات يتم تقييمها على الفور.

إرجاء التقييم يعني أن التكنولوجيا باستخدام موحدة ش تتولى مسؤولية تقييم التعبير من JSP المحرك تقييم التعبير في الوقت المناسب خلال الصفحة دورة الحياة.EL يأخذ السيطرة من JSP حاوية تقييم التعبير في الوقت المناسب.JSF ش تعبيرات تأخذ شكل #{defExpr}.JSF تعبيرات العمل في هذا السبيل.

يظهر المثال التالي JSF inputText الوسم الذي يمثل حقل نص العنصر الذي يدخل المستخدم قيمة.على inputText قيمة العلامة السمة المراجع تعبير يشير إلى الخاصية اسم الكتاب الفول.

<h:inputText id="name" value="#{student.name}"/>

لفترة أولية طلب من الصفحة التي تحتوي على هذا الوسم ، JSF تنفيذ يقيم #{طالب.اسم} التعبير خلال "تقديم رد" مرحلة من مراحل دورة الحياة.خلال هذه المرحلة يتم التعبير مجرد العدد القيمة الكمية من كتاب الفول ، كما هو الحال في التقييم الفوري.

من أجل إعادة النشر تنفيذ تقييم التعبير خلال "تطبيق طلب القيم" عملية "التصديقات" ، و "تحديث نموذج" مراحل خلالها قيمة استردادها من الطلب والتحقق من صحتها ، نشر الكتاب الفول.

وأنا أتساءل عما إذا كانت المشكلة من حقيقة أن مثيل SessionBean لم خلقت ؟

جرب هذا:

<jsp:useBean class="packagename.SessionBean" id="sb"/>
<c:forEach var="myObject" items="${sb.objects}">
            <h:outputText value="${myObject}" /> <br />
</c:forEach>

[تحديث] أنا أتساءل عما إذا كان هذا المادة قد يساعد ذلك الحين.وهذا ما يفسر كيف أن اثنين من ش العمل معا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top