我正在了解Struts2,但我并不完全清楚如何以及何时使用标记<jsp:UseBean>
与Struts标记。
我发现了一篇概述差异的文章,但没有提供任何示例。
http://struts.apache.org/development/1.x/struts-taglib/tlddoc/bean/define.html
<bean:define>
标记在几个方面与<jsp:useBean>
不同,包括:
这是我使用UseBean标记的快速测试代码。有谁能请给我一个例子如何/为什么(或者如果)我应该在display.jsp中使用Struts标签呢?
谢谢!
的index.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 name="input" action="TestServlet" method="post">
<input type="text" name="txtFirstName" placeholder="First Name">
<input type="text" name="txtLastName" placeholder="Last Name">
<input type="submit" value="Submit">
</form>
</body>
</html>
TestServlet.java
package com.website.servlets;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.website.models.Person;
/**
* Servlet implementation class TestServlet
*/
@WebServlet("/TestServlet")
public class TestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public TestServlet() {
super();
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String fname = request.getParameter("txtFirstName");
String lname = request.getParameter("txtLastName");
Person p = new Person();
p.setFirstName(fname);
p.setLastName(lname);
request.setAttribute("myPersonObj", p);
RequestDispatcher rd = request.getRequestDispatcher("display.jsp");
rd.forward(request, response);
}
}
display.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>
<jsp:useBean id="myPersonObj" class="com.website.models.Person" scope="request"></jsp:useBean>
<p>
Full Name : <jsp:getProperty property="firstName" name="myPersonObj"/>
<jsp:getProperty property="lastName" name="myPersonObj"/>
</p>
</body>
</html>
答案 0 :(得分:3)
因为您实际上是在servlet中创建bean,并将其放在请求属性中,所以可以替换:
<jsp:useBean id="myPersonObj" class="com.website.models.Person" scope="request"></jsp:useBean>
<p>
Full Name : <jsp:getProperty property="firstName" name="myPersonObj"/>
<jsp:getProperty property="lastName" name="myPersonObj"/>
</p>
使用(使用EL):
<p>
Full Name : ${myPersonObj.firstName}
${myPersonObj.lastName}
</p>
请参阅此处的Servlets info page:
如果您已经使用servlet处理模型,请不要使用
<jsp:useBean>
。它只会导致混淆和维护问题,因为<jsp:useBean>
遵循不同级别的MVC方法,而不是使用servlet时。它是servlet或<jsp:useBean>
,而不是两者。
因为<jsp:useBean>
与servlet不兼容,并且你需要使用servlet进行任何正常的编码,<jsp:useBean>
是完全过时的&#34; (正如JB Nizet在第一条评论中所说的那样)。
答案 1 :(得分:1)
你应该使用struts2标签,它们支持OGNL。 OGNL有一个上下文和一个值栈,它是一个根对象。因此,您的请求范围对象显示为
<p>
Full Name : <s:property value="#request.myPersonObj.firstName"/>
<s:property value="#request.myPersonObj.lastName"/>
</p>
为了更好地理解OGNL概念,请参阅docs。