سؤال

رأيت بعض التعليمات البرمجية مثل ما يلي في 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 سيتم تقييمه إلى سلسلة

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