从JSP中的业务逻辑中获取bean(使用表达式语言)

时间:2014-12-24 10:55:27

标签: jsp el

我有一个JSP,它接受一个参数(用户ID),我通过scriptlet中的业务逻辑调用检索用户详细信息;然后,我在各种表单字段中显示检索到的详细信息:

<%@page import="temp.UserLogic"%>
<%@page import="temp.User"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>Insert title here</title>
<%
    User user = new UserLogic().getUser(Long.parseLong(request.getParameter("userId")));
%>
</head>
<body>
    <form action="">
        <label>ID:</label>
        <input type="text" value="<%= user.getId() %>">
        <label>Username:</label>
        <input type="text" value="<%= user.getUsername() %>">
        <label>Password:</label>
        <input type="text" value="<%= user.getPassword() %>">
    </form>
</body>
</html>

我想抛弃scriptlet而转向EL。显然,我的表单字段很简单:

<input type="text" value="${user.id}">
<input type="text" value="${user.username}">
<input type="text" value="${user.password}">

然而,我正在努力解决我使用的问题,而不是这行代码:

User user = new UserLogic().getUser(Long.parseLong(request.getParameter("userId")));

我已经看过useBean标签,如果我只是想实例化并填充新bean,那么这很好,但在这个例子中我希望那个bean来自业务逻辑。

这种模式必须如此常见,但我花了几个小时在网上搜索没有答案......任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

Business Logic bean - UserLogic - 在JSP中确实没有任何地方。这应该在您的后端代码中调用,然后这个后端代码应该简单地将User放在JSP的范围内。

您正在寻找MVC(模型视图控制器)模式。

在Servlet中,这看起来像是:

//Servlet Acting as Controller
public LoadUserServlet extends HttpServlet{

    public void doGet(HttpServletRequest request, HttpServletResponse response){

        //Controller Loads the Model
        User user = new UserLogic().getUser(Long.parseLong(request.getParameter("userId")));
        request.setAttribute("user", user);

        //Controller Forwards to the Next View
        rd = request.getRequestDispatcher("/userEdit.jsp").forward(request, response);
    }
}

然后你的JSP就变成了:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
    <form action="">
        <label>ID:</label>
        <input type="text" value="${user.id}">
        <label>Username:</label>
        <input type="text" value="${user.userName}">
        <label>Password:</label>
        <input type="text" value="${user.password}">
    </form>
</body>
</html>

当然,Java MVC框架可以简化使用原始Servlet时所需的大量样板代码。