【问题标题】:jsp bean's Scope Request doesn't workjsp bean的范围请求不起作用
【发布时间】:2016-04-18 03:25:19
【问题描述】:

我对 JSP Bean 的作用域有疑问 - 请求。我有一个带有 jsp bean 'message' 的页面 Index.jsp,它的范围是 Request 和一个页面 result.jsp。当我从 Index.jsp 向 result.jsp 发送请求时。我的 bean 'message' 应该保持它的价值,但现在没有。

我尝试使用范围 Session 并且我的 bean 运行良好。我搜索了有关此问题的所有问题,但没有答案可以满足我的问题。

这是我的代码: 文件索引.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!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">
</head>
<body>

<%
    String name = request.getParameter("name") == null ? "" : 
                            request.getParameter("name");
    int age = ( request.getParameter("age") == null ||
                            request.getParameter("age") == "") ? 0 : 
                                Integer.parseInt(request.getParameter("age"));
%>

<h1>Nice to meet you</h1>

<form method="post" action="View/result.jsp">
<jsp:useBean id="message" class="com.java.Message" scope="request"/>
<jsp:setProperty name="message" property="message" value="Hello world!"/>

    <label>Name: </label> <br>
    <input type="text" name="name" placeholder = "Phan Dinh The"/> <br>

    <label>Age: </label> <br>
    <input type="number" name="age" placeholder = "25"/> <br>

    <input type="checkbox" name="title"/> Senior <br>

    <input type="radio" name="language" value="c#"/> C# <br>
    <input type="radio" name="language" value="java"/> Java <br>

    <br><br>

    <jsp:include page="View/date.jsp" flush="true"/>


    <input type="submit" value="submit"/>
    <br><br>


    </form>

    <br><br>
</body>
</html>

文件结果.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="com.java.Message"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!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>Insert title here</title>
</head>
<body>

    <jsp:useBean id="message" class="com.java.Message" scope="request"/>
    <jsp:getProperty name="message" property="message"/>
</body>
</html>

我的班级留言

package com.java;

public class Message {

private String message;

public String getMessage() {
    return message;
}

public void setMessage(String content) {
    this.message = content;
}
}

我使用的是 Tomcat 8.0.23,Jsp 版本 2.3,Servlet API 3.1

【问题讨论】:

    标签: java jsp javabeans


    【解决方案1】:

    当你使用

    <jsp:setProperty name="message" property="message" value="Hello world!"/>
    

    在 index.jsp 文件中,该属性的范围是 index.jsp 页面的请求。一旦索引 jsp 页面返回到客户端,该请求就完成了。当您提交表单时,会创建一个新请求,并用于生成结果页面。因此,当您在 result.jsp 代码中时,没有名为“消息”的请求范围参数。

    你总是可以把消息放在一个

    <input type="hidden" name="message">Hello World</input>
    

    表单的字段,并以这种方式在 results.jsp 中检索它。

    【讨论】:

    • 谢谢 MeBigFatGuy,所以如果我想使用 jsp:set 和 jsp:get,对我来说唯一的方法就是使用会话或应用程序范围,不是吗?
    • 你能给我举个例子来看看JSP Bean中范围请求和范围页面之间的区别吗?
    • 其他人可以帮助我吗?
    • 这似乎是一个“大脑错误”,因为 &lt;jsp.getPropertyjsp.setProperty 是在服务器中呈现包含页面(索引)时执行的之前页面被发送到浏览器。在浏览器中启动的提交只会提交 HTML 输入字段。浏览器对jsp:...一无所知
    • “大脑错误”,@@ Holger,我认为你不应该这么说
    猜你喜欢
    • 1970-01-01
    • 2013-04-19
    • 2020-12-02
    • 2013-01-21
    • 2011-11-11
    • 1970-01-01
    • 2011-04-19
    • 2012-07-29
    • 2012-05-26
    相关资源
    最近更新 更多