Java 使用HttpSession时,变量不能从一个JSP转换到另一个JSP
使用Java 使用HttpSession时,变量不能从一个JSP转换到另一个JSP,java,jsp,servlets,Java,Jsp,Servlets,使用doPost,以及我的方法为post的表单,从一个jsp页面检索到另一个jsp页面时遇到问题。下面的注释是一个简单的例子 首先,我有两页: 这里是search.jsp: <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> <!DOCTYPE html> <html> <head> <title>search</title>
doPost
,以及我的方法为post
的表单,从一个jsp页面检索到另一个jsp页面时遇到问题。下面的注释是一个简单的例子
首先,我有两页:
这里是search.jsp
:
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<!DOCTYPE html>
<html>
<head>
<title>search</title>
<body>
<form name="search" method="post" action="search_results.jsp">
<p>
<input type="text" class="inputTitle" id="inputTitle" value="${fn:escapeXml(param.inputTitle)}">
<button type="submit">Search</button>
<p>
</form>
</body>
</html>
现在我有了一个名为SearchServlet.java
的类:
@WebServlet("/search")
public class SearchServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
HttpSession session = request.getSession();
request.getRequestDispatcher("search.jsp").forward(request,response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
HttpSession session = request.getSession();
String title = request.getParameter("inputTitle");
String searchTitle;
try {
if(title != null && !title.isEmpty()) {
searchTitle = "hello";
} else {
searchTitle = "world";
}
session.setAttribute("movie.title", searchTitle);
request.getRequestDispatcher("search_results.jsp").forward(request, response);
} catch(ServletException e) { e.printStackTrace(); }
}
}
无论我输入什么,结果(movie.title)总是为空,因此我在
search\u results.jsp上得到world
。为什么我的参数没有被传递到search\u results.jsp
?如果绕过servlet,就不会发生这种情况
看看你的动作形式
<form name="search" method="post" action="search_results.jsp">
然后,您应该从servlet将请求转发到搜索结果.jsp
,您实际上是这样做的
除此之外,在调用request.getParameter时,您必须记住,重要的是输入字段的名称,而不是id。您应该将id
属性更改为name
<input type="text" class="inputTitle" name="inputTitle" value="${fn:escapeXml(param.inputTitle)}">
当您检索属性时,点符号表示您正在访问名为movie的对象中的字段
<p>Title: ${movie.title}</p> <!-- you are accessing the title property of a movie object !-->
标题:${movie.Title}
但你没有…你有一部电影,大概是一根弦。将属性名更改为movietitle(不带点),并以相同的方式在jsp中检索它。上述行将变为:
session.setAttribute("movietitle", searchTitle);
<p>Title: ${movietitle}</p>
session.setAttribute(“movietitle”,searchTitle);
标题:${movietitle}
这应该可以解决问题。如果绕过servlet,就不会发生这种情况
看看你的动作形式
<form name="search" method="post" action="search_results.jsp">
然后,您应该从servlet将请求转发到搜索结果.jsp
,您实际上是这样做的
除此之外,在调用request.getParameter时,您必须记住,重要的是输入字段的名称,而不是id。您应该将id
属性更改为name
<input type="text" class="inputTitle" name="inputTitle" value="${fn:escapeXml(param.inputTitle)}">
当您检索属性时,点符号表示您正在访问名为movie的对象中的字段
<p>Title: ${movie.title}</p> <!-- you are accessing the title property of a movie object !-->
标题:${movie.Title}
但你没有…你有一部电影,大概是一根弦。将属性名更改为movietitle(不带点),并以相同的方式在jsp中检索它。上述行将变为:
session.setAttribute("movietitle", searchTitle);
<p>Title: ${movietitle}</p>
session.setAttribute(“movietitle”,searchTitle);
标题:${movietitle}
这应该可以解决问题。您可能希望提醒/打印“${fn:escapeXml(param.inputTitle)}”,看看它实际提供了什么。@Roshith当我使用console.log(${fn:escapeXml(param.inputTitle)}”)并在标题中加上“hello”时,我从console.log得到一个空字符串。您可能希望提醒/打印“${fn:escapeXml(param.inputTitle)}”要查看它实际提供了什么。@当我使用console.log(${fn:escapeXml(param.inputTitle)})并在标题中添加“hello”时,我从console.logHmm中得到一个空白字符串。。这在某种意义上有效吗?不管出于什么原因,传入的值仍然为null。因此,没有字符串被传递到我的servlet中,或者至少被转发到搜索结果页面。request.getParameter依赖于name属性而不是IDA。在将名称更改为属性(inputTitle)后,我仍然以传入null结束。更奇怪的是,使用apache commons字符串Util库,检查如果(StringUtils.isNotBlank(title)){searchTitle=“hello”}否则{searchTitle=“world”}
抛出一个空指针,但要去掉输入标记中的value属性(设置为param.inputtle的属性)。我认为当您将请求发送到Servlet时,参数将被捕获。非常感谢!你肯定为我澄清了很多事情:DHmm。。这在某种意义上有效吗?不管出于什么原因,传入的值仍然为null。因此,没有字符串被传递到我的servlet中,或者至少被转发到搜索结果页面。request.getParameter依赖于name属性而不是IDA。在将名称更改为属性(inputTitle)后,我仍然以传入null结束。更奇怪的是,使用apache commons字符串Util库,检查如果(StringUtils.isNotBlank(title)){searchTitle=“hello”}否则{searchTitle=“world”}
抛出一个空指针,但要去掉输入标记中的value属性(设置为param.inputtle的属性)。我认为当您将请求发送到Servlet时,参数将被捕获。非常感谢!你肯定为我澄清了很多:D