JSP العلامة الفول على العقارات التي قد لا توجد
سؤال
في JSP يمكنني الرجوع الملكية حبة باستخدام العلامة $ {object.property}
هل هناك طريقة للتعامل مع الخصائص التي قد لا توجد؟ لدي صفحة JSP التي تحتاج إلى التعامل مع أنواع مختلفة. مثال:
public class Person {
public String getName()
}
public class Employee extends Person {
public float getSalary()
}
في JSP أريد أن عرض جدول للأشخاص الذين يعانون من الأعمدة الاسم والراتب. إذا كان الشخص غير موظف الراتب ثم يجب أن تكون فارغة. وHTML صف واحد قد تبدو مثل:
<tr>
<td><c:out value="${person.name}"></td>
<td><c:out value="${person.salary}"></td>
</tr>
ومما يؤسف له إذا لم يكن الشخص الموظف ثم فإنه لا يمكن العثور على الرواتب ويحدث خطأ. كيف لي أن حل هذا في JSP؟
وتحرير: هل هناك على instanceof حدد في JSP العلامة لغة
المحلول
ومجرد استخدام المشغل فارغة EL IF كان سمة بنطاق، للأسف سيكون لديك للذهاب مع توضيح التعبير باستخدام employee.salary مع <ج: الصيد>:
<c:catch var="err">
<c:out value="${employee.salary}"/>
</c:catch>
إذا كنت حقا بحاجة <م> instanceof م>، قد تفكر في علامة مخصصة.
نصائح أخرى
إذا كنت تريد الطبقة، ومجرد استخدام ${person.class}
. يمكنك أيضا استخدام ${person.class.name eq 'my.package.PersonClass'}
ويمكنك أيضا استخدام "الافتراضي" على ج: خروج
<c:out value='${person.salary}' default="Null Value" />
وموجزة، ولكن دون رادع.
<tr>
<td>${person.name}</td>
<td>${person.class.simpleName == 'Employee' ? person.salary : ''}</td>
</tr>
<اقتباس فقرة>
هل هناك الاختيار instanceof في JSP العلامة اللغة؟
اقتباس فقرة>وليس في لحظة كتابة هذه السطور. قرأت في مكان ما أن لديهم محفوظة ذلك، <م> instanceof م> الكلمة، في EL، قد يكون في المستقبل. وعلاوة على ذلك، هناك مكتبة المتاحة التي لديها هذه العلامة المحددة. ننظر في ذلك قبل اتخاذ قرار لإنشاء بعض العلامة المخصصة لنفسك. هنا هو الرابط، Unstandard مكتبة العلامة .
وأسلوب واحد سيكون لإنشاء مكتبة العلامة المخصصة واستخدام التعدد داخله للتعامل مع الحالة التي يكون فيها Person
<م> هو واحد م> Employee
.
وأنا لم تفعل هذا في حين لJSP، ولكن كثيرا ما تستخدم تقنية مماثلة في GSP (رائع / الكؤوس المقدسة صفحات الملقم).
وعلى خلاف ذلك، كنت قد وضعت بعض المنطق في JSP
(ليست مثالية) لاختبار Employee
نيس:
<%
String salary
if (person instanceof Employee) {
salary = person.salary
} else {
salary = "" // or ' '
}
%>
<td><c:out value="${salary}"></td>
هل يمكن أن يكون دائما حقل نوع.
public class Person {
public String getType() { return "Person"; }
public String getName()
}
public class Employee extends Person {
public String getType() { return "Employee"; }
public float getSalary()
}
وJSP لديك ستبدو
<tr>
<td><c:out value="${person.name}"></td>
<td><c:if test="'Employee' eq person.type"><c:out value="${person.salary}"></c:if></td>
</tr>
وبالطبع الطبقة الدرجة بالفعل هذا ...
<tr>
<td><c:out value="${person.name}"></td>
<td><c:if test="'Employee' eq person.class.simpleName"><c:out value="${person.salary}"></c:if></td>
</tr>
هل يمكن أن يكون أيضا ` 'طريقة isEmployee ().