it-swarm.dev

كيفية استخدام if ، شرط آخر في jsf لعرض الصورة

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

اعتدت JSTL داخل صفحة jsf. ولكن دائمًا ما تحاول الانتقال إلى حلقة أخرى لعرض الصورة. وظيفة تعمل بشكل جيد. الشيء الوحيد هو أنني لا أستطيع عرض الصورة الوهمية عندما أزور الصفحة أولاً. إليكم الكود:

<c:if test="${'#{user.userId}' == '0'}">
  <a href="Images/thumb_02.jpg" target="_blank" ></a>
  <img src="Images/thumb_02.jpg" />
</c:if>
<c:otherwise>
  <a href="/DisplayBlobExample?userId=#{user.userId}" target="_blank"</a>
  <img src="/DisplayBlobExample?userId=#{user.userId}" />
</c:otherwise>

هل يمكنني استخدام علامة JSTL هذه أم يمكنني القيام بذلك باستخدام jsf؟

31
pravi

من غير القانوني تداخل تعبيرات EL: يجب عليك تضمينها. استخدام JSTL صالح تمامًا في حالتك. تصحيح الخطأ ، ستجعل الكود يعمل:

<c:if test="#{not empty user or user.userId eq 0}">
    <a href="Images/thumb_02.jpg" target="_blank" ></a>
    <img src="Images/thumb_02.jpg" />
</c:if>
<c:if test="#{empty user or user.userId eq 0}">
    <a href="/DisplayBlobExample?userId=#{user.userId}" target="_blank"></a>
    <img src="/DisplayBlobExample?userId=#{user.userId}" />
</c:if>

حل آخر هو تحديد جميع الشروط التي تريدها داخل EL لعنصر واحد. رغم أنه قد يكون أثقل وأقل قابلية للقراءة ، إلا أنه هنا:

<a href="#{not empty user or user.userId eq 0 ? '/Images/thumb_02.jpg' : '/DisplayBlobExample?userId='}#{not empty user or user.userId eq 0 ? '' : user.userId}" target="_blank"></a>
<img src="#{not empty user or user.userId eq 0 ? '/Images/thumb_02.jpg' : '/DisplayBlobExample?userId='}#{not empty user or user.userId eq 0 ? '' : user.userId}" target="_blank"></img>
36
skuntsel

بالنسبة لأولئك مثلي الذين اتبعوا للتو الرمز بواسطة skuntsel وتلقوا تتبع مكدس خفي ، اسمح لي أن أنقذك بعض الوقت.

يبدو c:if لا يمكن في حد ذاته أن يتبعه c:otherwise.

صحيح الحل كما يلي:

<c:choose>
    <c:when test="#{some.test}">
        <p>some.test is true</p>
    </c:when>
    <c:otherwise>
        <p>some.test is not true</p>
    </c:otherwise>
</c:choose>

يمكنك إضافة اختبارات c:when إضافية عند الضرورة.

44
jmkgreen

بدلاً من استخدام العلامات "c" ، يمكنك أيضًا القيام بما يلي:

<h:outputLink value="Images/thumb_02.jpg" target="_blank" rendered="#{not empty user or user.userId eq 0}" />
<h:graphicImage value="Images/thumb_02.jpg" rendered="#{not empty user or user.userId eq 0}" />

<h:outputLink value="/DisplayBlobExample?userId=#{user.userId}" target="_blank" rendered="#{not empty user and user.userId neq 0}" />
<h:graphicImage value="/DisplayBlobExample?userId=#{user.userId}" rendered="#{not empty user and user.userId neq 0}"/>

أعتقد أن هذا بديل أكثر قابلية للقراءة قليلاً للإجابة البديلة الخاصة بـ skuntsel ويستخدم ميزة JSF المقدمة بدلاً من تداخل عامل التشغيل الثلاثي. وبعيدًا عن الإجابة ، هل كنت تقصد وضع صورتك بين علامات الربط بحيث تكون الصورة قابلة للنقر؟

7
Ryan D