2012-11-30 16 views
8

Çerçeve java uygulamam yok. İş mantığı için görünüm ve servletler için jsp dosyalarından oluşur. Kullanıcı oturumu ayarlamak için bir firstName parametresi olan sunucu uygulamasıdır. Jsp dosyasında, firstName parametresinin bir değeri olup olmadığını kontrol etmem gerekiyor. FirstName parametresi ayarlanmışsa, jsp dosyasında bir miktar html görüntülemem gerekir. Ayarlanmamışsa, jsp dosyasına farklı html göstermem gerekir.jsp dosyasındaki servlet oturum özniteliği değerini denetleme

Servlet.java:

HttpSession session = request.getSession(); 
session.setAttribute("firstName", customer.getFristName()); 
String url = "/index.jsp"; 
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(url); 
dispatcher.forward(request, response); 

header.jsp:

// Between the <p> tags bellow I need to put some HTML with the following rules 
// If firstName exist: Hello ${firstName} <a href="logout.jsp">Log out</a> 
// Else: <a href="login.jsp">Login</a> or <a href="register.jsp">Register</a> 

<p class="credentials" id="cr"></p> 

Ne Bunu yapmanın en iyi yolu olurdu?

Güncelleme: İşte

Ben JSTL üzerinde bulunan büyük öğretici olduğunu durumda herkes buna ihtiyacı:

 HttpSession session = request.getSession(true); 
     session.setAttribute("firstName", customer.getFristName()) 
     response.sendRedirect("index.jsp"); 

aşağıdaki gibi yazabilirsiniz servlet'dir http://www.tutorialspoint.com/jsp/jsp_standard_tag_library.htm

cevap

9
<% if (session.getAttribute("firstName") == null) { %> 
    <p> some content </p> 
<% } else {%> 
    <p> other content </p> 
<% } %> 
+0

için tavsiye ederiz. Bu çözüm temiz ve basittir. Tam olarak istediğim şeyi yaptı. Jsp EL ile uğraşıyordum ve gerçekten dağınıktı. :) – Marta

+3

Dağınık mı? Görünüşe göre yanlış bir şey yaptın. JSTL/EL sayesinde kadar basit '

bazı içerik

diğer içerik

'. Nasıl daha dağınık olduğundan emin değilim. – BalusC

+0

@BalusC Elbette yaptım! EL'de bir if-else yapısı arıyordum ve işe yaramazdım, bu yüzden bu fikri terk ettim. Örneklerine baktığımda, istediğimi de yapardı. JSP'ye java kodu koymak yerine bunu muhtemelen kullanacağım. JSP'lerinizdeki java'dan EL/JSTL kullanmanın daha iyi bir uygulama olduğunu okudum. Yardım ettiğin için teşekkür ederim! – Marta

0

Herhangi bir oturum yoksa request.getSession(true) yeni bir oturum döndürür, aksi takdirde geçerli oturumu döndürür.

<% 
if(session.getAttribute("firstName")==null) { 
%> 
<jsp:include page="firstPage.html"></jsp:include> 
<% 
} else { 
%> 
<jsp:include page="secondPage.html"></jsp:include> 
<% 
}%> 

Burada firstName sonra firstPage.html sayfa aksi secondPage.html dahil edilecektir null ise şu şekildedir: yapabileceğiniz index.jsp sayfasında Ve.

+0

Teşekkür ederim Visruth! GetSession (gerçek) hakkında büyük açıklama. – Marta

+1

'request.getSession()', ** kapakların altında tam olarak ** aynıdır. Ayrıca bkz. [Javadoc] (http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html # getSession()). Aslında, 'gerçek' argümanı tamamen gereksizdir. – BalusC

1

Bunu yapmanın en iyi yolunun jstl etiketlerinin kullanılması olduğunu düşünüyorum. Çünkü basit jsp uygulama için html ama daha ağır uygulama tüm java kodunu eklemek için en iyi uygulama html üzerinde minimum java kodu kullanmak için en iyi uygulamadır. (Mantıktan ayrı görünüm katmanı) (daha fazla https://stackoverflow.com/a/3180202/2940265 için okuyun)
Sizin için Beklentiyi kolayca kullanabilirsin gibi kod kullanabilirsiniz

<c:if test="${not empty firstName}"> 
    <%--If you want to print content from session--%> 
    <p>${firstName}</p> 

    <%--If you want to include html--%> 
<%@include file="/your/path/to/include/file.jsp" %> 

    <%--include only get wrong if you give the incorrect file path --%> 
</c:if> 
<c:if test="${empty firstName}"> 
    <p>Jaathi mcn Jaathi</p> 
</c:if> 

Eğer jstl'yi doğru şekilde eklemediyseniz, beklenen çıktıyı elde edemezsiniz. Bu olayı https://menukablog.wordpress.com/2016/05/10/add-jstl-tab-library-to-you-project-correctly/