2013-07-11 10 views
21

Kullanıcı formunun 0 olduğunu gösterirse ve herhangi bir güncellemeden kullanıcıyı düzenlediğimde kayıt formum var. 0'a eşit olmayan userid, daha sonra userid'e karşılık gelen görüntüyü gösterir.Görüntüyü görüntülemek için jsf içinde başka bir koşul varsa nasıl kullanılır

JSTL sayfasını jsf sayfasında kullandım. Ama her zaman görüntü göstermek için başka bir yere gitmeye çalışır. İşlevsellik iyi çalışıyor. Tek şey, önce sayfayı ziyaret ettiğimde sahte görüntüyü gösteremem. İşte kodum:

<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> 

Bu JSTL etiketini kullanabilir miyim yoksa jsf kullanarak yapabilir miyim?

cevap

27

EL ifadelerini yerleştirmek yasa dışıdır: bunları satır içi kullanmalısınız. JSTL kullanarak durumunuzda mükemmel bir şekilde geçerlidir.

<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> 

Başka bir çözüm size bir elementin bir EL içine istediğiniz tüm koşulları belirtmektir: hata düzeltme, kod çalışma yapacağız. ağır ve daha az okunabilir olabilir rağmen, işte burada: sadece skuntsel tarafından kodunu takip etti ve bir şifreli yığın izlemesini aldı kim ben gibi olanlar için

<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> 
+0

Bu, yalnızca (neredeyse) çoğaltılmış kodla sonuçlanmakla kalmaz, aynı zamanda iki katına çıkmış değerlendirme süresine de neden olur. 'C: + c öğesini seçin: bunun yerine + c: aksi halde. – Qdeep

29

, sana biraz zaman kazanmak için izin verir.

Görünüşe göre c:if, c:otherwise tarafından takip edilemez. aşağıdaki gibi

doğru çözümdür:

<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> 

Gerektikçe ek c:when testleri ekleyebilir. Bunun yerine "c" etiketlerini kullanma

+0

Bir güncelleme yazdığın harika! Sadece cevabımı da düzeltdim, böylelikle de derlerdi. Cevabınızı tekrarlamak bazen yardımcı olabilir. – skuntsel

6

, ayrıca yapabileceği aşağıdaki:

<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}"/> 

O skuntsel alternatif cevaba biraz daha okunabilir bir alternatif olduğunu düşünüyorum ve bir yuva yerine JSF hale niteliği kullanmaktadır üçlü operatör. Ve cevabın sonunda, görüntüyü bağlantı etiketleri arasına yerleştirmek için görüntüyü tıklanabilir mi?

İlgili konular