我有一个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来自业务逻辑。
这种模式必须如此常见,但我花了几个小时在网上搜索没有答案......任何帮助都会受到赞赏。
答案 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时所需的大量样板代码。