2012-11-30 27 views
8

Tôi không có ứng dụng java khung. Nó bao gồm các tệp tin jsp để xem và các servlet cho logic nghiệp vụ. Tôi phải thiết lập phiên người dùng là servlet với tham số firstName. Trong tệp jsp, tôi cần kiểm tra xem tham số firstName của tôi có giá trị hay không. Nếu tham số firstName được đặt, tôi cần hiển thị một số html trong tệp jsp. Nếu nó không được thiết lập, tôi cần hiển thị html khác nhau trong tệp jsp.Kiểm tra giá trị thuộc tính phiên servlet trong tệp jsp

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> 

Điều gì sẽ là cách tốt nhất để làm điều này?

Cập nhật:

Đây là một hướng dẫn tuyệt vời, tôi tìm thấy trên JSTL, trong trường hợp bất cứ ai cần nó: http://www.tutorialspoint.com/jsp/jsp_standard_tag_library.htm

Trả lời

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

Cảm ơn bạn Ibrahim! Giải pháp này là sạch sẽ và đơn giản. Nó đã làm chính xác những gì tôi muốn nó làm. Tôi đã rối tung với jsp EL và nó đã nhận được thực sự lộn xộn. :) – Marta

+3

Lộn xộn? Rõ ràng bạn đã làm điều gì đó sai trái. Với JSTL/EL nó đơn giản như '

một số nội dung

nội dung khác

'. Tôi không chắc nó lộn xộn thế nào. – BalusC

+0

@BalusC Tôi chắc chắn đã làm! Tôi đang tìm kiếm một cấu trúc if-else trong EL, và không thể làm cho nó hoạt động được, vì vậy tôi đã từ bỏ ý tưởng đó. Nhìn vào ví dụ của bạn, nó sẽ làm những gì tôi muốn. Tôi có lẽ sẽ sử dụng này thay vì đặt mã java trong JSP của tôi. Tôi đọc rằng thực hành tốt hơn là sử dụng EL/JSTL hơn java trong các JSP của bạn. Cảm ơn bạn đã giúp đỡ! – Marta

0

Trong servlet bạn có thể viết như sau

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

Các request.getSession(true) trả về một phiên mới nếu nó không tồn tại bất kỳ phiên nào khác, nếu không nó sẽ trả về phiên hiện tại. Và, trong trang index.jsp bạn có thể làm như sau:

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

Ở đây, nếu firstName là null thì firstPage.html sẽ được đưa vào trang khác secondPage.html.

+0

Cảm ơn bạn Visruth! Giải thích tuyệt vời về getSession (đúng). – Marta

+1

'request.getSession()' thực hiện ** chính xác ** giống như dưới bìa. Xem thêm [javadoc] (http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html # getSession()). Thực tế, đối số 'true' hoàn toàn thừa. – BalusC

1

Tôi nghĩ cách tốt nhất để làm điều đó là sử dụng thẻ jstl. Bởi vì đối với ứng dụng jsp đơn giản, bạn nên thêm tất cả mã java vào html nhưng ứng dụng nặng hơn là thực hành tốt nhất để sử dụng mã java tối thiểu trên html. (Xem riêng lớp logic) (đọc này để biết thêm https://stackoverflow.com/a/3180202/2940265)
kỳ vọng bạn có thể dễ dàng sử dụng mã như dưới đây

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

Nếu bạn không bao gồm chính xác jstl bạn sẽ không thể nhận được kết quả mong đợi. tham khảo điều này cho sự cố như vậy https://menukablog.wordpress.com/2016/05/10/add-jstl-tab-library-to-you-project-correctly/

Các vấn đề liên quan