سمة الاختبار في علامة JSTL <c:if>
سؤال
رأيت بعض التعليمات البرمجية مثل ما يلي في JSP
<c:if test="<%=request.isUserInRole(RoleEnum.USER.getCode())%>">
<li>user</li>
</c:if>
إن حيرتي تكمن في "=" الذي يظهر في قيمة test
يصف.كان فهمي أن أي شيء مدرج في الداخل <%= %>
تتم طباعتها على الإخراج، ولكن من المؤكد أن القيمة المخصصة للاختبار يجب أن تكون منطقية، فلماذا يعمل هذا؟
بالنسبة للنقاط الإضافية، هل هناك أي طريقة لتغيير قيمة السمة أعلاه بحيث لا تستخدم كود البرنامج النصي؟من المفترض أن هذا يعني استخدام EL بدلاً من ذلك.
هتافات ، دون
المحلول
كل ذلك test
السمة التي تبحث عنها لتحديد ما إذا كان شيء ما صحيحًا هي السلسلة "صحيح" (حساسة لحالة الأحرف).على سبيل المثال، سيتم طباعة التعليمة البرمجية التالية "Hello World!"
<c:if test="true">Hello world!</c:if>
الكود داخل <%= %>
تقوم بإرجاع قيمة منطقية، لذلك ستطبع السلسلة إما "صحيح" أو "خطأ"، وهو بالضبط ما <c:if>
العلامة تبحث عن.
نصائح أخرى
يمكنك أيضًا استخدام شيء مثل
<c:if test="${ testObject.testPropert == "testValue" }">...</c:if>
يتم تقييم التعبير بين <%= %> قبل تقييم العلامة c:if.لذلك ، لنفترض أن | request.isuserinrole | العوائد | صحيح | ، سيتم تقييم مثالك على هذا أولاً:
<c:if test="true">
<li>user</li>
</c:if>
وبعد ذلك سيتم تنفيذ العلامة c:if.
يمكن أن تكون السمات الموجودة في مكتبات علامات JSP بشكل عام ثابتة أو يتم حلها في وقت الطلب.إذا تم حلها في وقت الطلب، فسيقوم JSP بحل قيمتها في وقت التشغيل وتمرير المخرجات إلى العلامة.هذا يعني أنه يمكنك وضع أي كود JSP تقريبًا في السمة وسوف تتصرف العلامة وفقًا للمخرجات التي تنتج.
إذا نظرت إلى مستندات jstl taglib، يمكنك معرفة السمات التي تصلح للوقت وأيها ليست كذلك. http://java.sun.com/products/jsp/jstl/1.1/docs/tlddocs/index.html
سيتم إرسال <%=%> بمفرده إلى الإخراج، وفي سياق JSTL سيتم تقييمه إلى سلسلة