[英]Accessing request scoped bean inside servlet
I have a jsp page where i am using a bean as request scope bean. 我有一个jsp页面,我在其中使用一个bean作为请求范围bean。 I have an input text whose value is the attribute of the bean.
我有一个输入文本,其值是Bean的属性。 On the form submit my action is someServlet.
在表单上提交我的操作是someServlet。 Now in that someServlet i want to access the bean that i used in my jsp page.
现在在someServlet中,我想访问我在jsp页面中使用的bean。 here is sample code i am using.
这是我正在使用的示例代码。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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="userBean" scope="request" class="com.iceman.bean.UserBean">
<jsp:setProperty property="*" name="userBean"/></jsp:useBean>
<form action="action.do" method="post">
Type Your Name:<input type="text" name="userName"/><br/>
<input type="submit" value="Submit"/>
</form>
</body>
</html>
Servler Servler
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
UserBean userBean = (UserBean)request.getAttribute("userBean");
response.getWriter().print(userBean.getUserName());
}
When i run this i get a null pointer exception on servlet line where i call bean getter method. 当我运行它时,我在servlet行上得到一个空指针异常,在这里我调用bean getter方法。
Where am i doing wrong? 我在哪里做错了?
It is simply because the render request and the post request are different requests: 仅仅是因为渲染请求和发布请求是不同的请求:
The only ways to have information to persist between requests are: 在请求之间保留信息的唯一方法是:
For clarity , you need to take your bean declaration <jsp:useBean id="userBean" scope="request" class="com.iceman.bean.UserBean"></jsp:useBean>
outside form
element , and change definition to 为了清楚起见,您需要将bean声明
<jsp:useBean id="userBean" scope="request" class="com.iceman.bean.UserBean"></jsp:useBean>
form
元素之外,并将定义更改为
<jsp:useBean id="userBean" scope="request" class="com.iceman.bean.UserBean">
<jsp:setProperty name="userBean" property="*" />
</jsp:useBean>
Star ( * ) means that all bean properties with names that match request parameters sent to the page are set automatically. 星号(*)表示将自动设置名称与发送到页面的请求参数匹配的所有bean属性。 ( As per O`Reilly book )
(根据O`Reilly的书)
then you need to change line <input type="text" value="${userBean.userName}"/>
to <input type="text" name="one of field names as per your UserBean class "/>
那么您需要
<input type="text" name="one of field names as per your UserBean class "/>
,将行<input type="text" value="${userBean.userName}"/>
更改为<input type="text" name="one of field names as per your UserBean class "/>
You have not shared details of UserBean class but I guess field name is userName
您尚未共享UserBean类的详细信息,但我想字段名称为
userName
Regarding bean being NULL
in request
, please refer answer by Jan Zyka for question jsp useBean is NULL by getAttribute by servlet 关于
request
Bean为NULL
,请参阅Jan Zyka的回答以获取问题jsp useBean的servlet为getAttribute的NULL
Hope it helps !! 希望能帮助到你 !!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.