在JSP / forward对象的servlet中使用servlet中创建的对象

时间:2015-01-22 16:32:51

标签: java spring jsp spring-mvc servlets

正如标题所说,我试图在JSP中使用servlet中创建的相同对象。该对象是一个模型(称为" customer"它包含值/数据。我在servlet中设置值并在JSP中获取/打印它们。

我尝试在JSP中创建一个新对象,但该值变为null。

目前,客户类中的变量和get方法是静态的。这有效,但我不希望它们是静态的。 为此,我必须获取servlet中的现有对象并在JSP中重用它。

在有人说我应该读书之前,相信我,我有。我只是不理解它,我希望有人帮助我。请。

就我而言:

的Servlet

String firstName = request.getParameter("förnamn");
Customer control = new Customer ();
control.setFirstName(firstName);
HttpSession session = request.getSession();
session.setAttribute("förnamn", firstName);

   request.setAttribute("control", control);
        RequestDispatcher view =     request.getRequestDispatcher("result.jsp");
        view.forward(request, response); 

这是客户类:

private static String firstName;
public static String getFirstName() {
    return firstName;
}
public static void setFirstName(String firstName) {
    Customer.firstName = firstName;
}

这是我的JSP:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"    "http://www.w3.org/TR/html4/loose.dtd">
 <html>

<head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Your information in JSP Format:</title>
 <%@ page import="Abdi.Customer" %>
 <%HttpSessionListenerTest http = new HttpSessionListenerTest();%>
</head>
<body>

<ul>
<li><p><b>Last Name:</b>
 <%= Customer.getFirstName() // i want to print it, without using  static methods%>
</p></li>


 </ul>

1 个答案:

答案 0 :(得分:0)

您的Customer类存在问题。您已将所有实例变量设为私有静态,并访问它们的公共静态方法。在您的情况下,无论您使用新Customer()创建多少客户对象,都只有一个firstName变量。静态意味着每个类定义一个

将Customer类中的变量设置为私有,并使用公共setter / getter来改变状态。完成后,您可以在请求/会话/应用程序范围内将它们作为属性添加到servlet中,转发到JSP并使用Expresssion Language(EL)或JSTL访问它们。停止使用scriptlet,它们是90年代。

在你的Servlet中,

String firstName = request.getParameter("förnamn");
Customer customer = new Customer ();
customer.setFirstName(firstName);
HttpSession session = request.getSession();
session.setAttribute("customer", customer);

---转发到JSP ----

在您的JSP中,只需使用EL

${customer.firstName} 

一般来说,${yourAttributeName.yourPropertyNameFromPOJO}

请注意,我没有提到我的fName属性的范围。它将搜索以Page - &gt;开头的所有有效范围。请求 - &gt;会话 - &gt;应用

如果使用$未解析这些值,则EL将关闭。您可以在页面指令中使用isELIgnored属性启用它,如此

<%@ page language="java" isELIgnored="false" %>