当前页面: 开发资料首页 → J2EE 专题 → 在struts中的跳转后JSP页面request中的值如何读取?
在struts中的跳转后JSP页面request中的值如何读取?
摘要: 在struts中的跳转后JSP页面request中的值如何读取?
登录页面Login把用户提交
<%@ page contentType="text/html; charset=GBK" language="java" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<head>
用户登录页面
</head>
<body bgcolor="#ffffff">
用户登录页面
姓名:
密码:
</body>
在FormBean中(LoginForm.java)设好相同的属性(省略方法):
private String userName;
private String password;
在Action中(LoginAction.java)的execute方法内容:
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception{
LoginForm loginForm = (LoginForm) form;
String userName=loginForm.getUserName();
String password=loginForm.getPassword();
LoginDAO dao=new LoginDAO();
User user=new User(userName,password);
//判断是否有该用户
if(dao.login(userName,password)){
request.setAttribute("userbean",user); //在这设置了提交的对象,为什么在跳转后的页面读取不出来??
return(mapping.findForward("Success"));
}else{
return(mapping.findForward("Failure"));
}
}
其他的Bean有:
LoginDAO.java:
package loginstruts;
import java.sql.*;
public class LoginDAO {
Connection conn=null;
public LoginDAO() {
}
//连接数据库
public Connection getConnectionDB(){
String strDB="sun.jdbc.odbc.JdbcOdbcDriver";
String strUrl="jdbc:odbc:login";
try {
Class.forName(strDB);
conn=DriverManager.getConnection(strUrl);
System.out.println("connetin seccess......");
} catch (Exception ex) {
ex.printStackTrace();
}
return conn;
}
//关闭数据库
public void closeConnectionDB(){
try {
conn.close();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
//判断是否有传入的用户
public boolean login(String u,String p){
User user=new User(u,p);
String strSql="select * from user";
getConnectionDB();
try {
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(strSql);
while(rs.next()){
user.setPassword(rs.getString("Password"));
user.setUserName(rs.getString("UserName"));
if(u.equals(user.getUserName()) || (p.equals(user.getPassword()))){
rs.close();
st.close();
closeConnectionDB();
return true;
}
}
} catch (SQLException ex) {
ex.printStackTrace();
}
return false;
}
}
User.java:
package loginstruts;
public class User {
private String userName;
private String password;
public User(){
}
public User(String name,String psw) {
this.userName=name;
this.password=psw;
}
public void setUserName(String userName) {
this.userName = userName;
}
public void setPassword(String password) {
this.password = password;
}
public String getUserName() {
return userName;
}
public String getPassword() {
return password;
}
}
struts-config.xml中的配置(部分):
<form-beans>
<form-bean name="LoginForm" type="loginstruts.LoginForm"/>
</form-beans>
type = "loginstruts.LoginAction"
name = "LoginForm"
scope = "request"
input = "/Login.jsp">
最后我在跳转后的Welcome.jsp页面中就是读不出request中的数据出来,为什么呢?
<%@ page contentType="text/html; charset=GBK" language="java" %>
<%@ page import="loginstruts.*" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<head>
用户登录成功
</head>
<body bgcolor="#ffffff">
登录成功
Hello,
!
</body>
也试过在Welcome.jsp中用如下代码读出来的request.getAttribute("userbean")中的值为null....为什么呢?是不是哪里错了?求教...
<%
User tb=(User)request.getAttribute("userbean");
String name=tb.getUserName();
out.println(name);
%>
改了一下Action(LoginAction.java)的execute方法内容,在方法中可以正确读出来:
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception{
LoginForm loginForm = (LoginForm) form;
String userName=loginForm.getUserName();
String password=loginForm.getPassword();
LoginDAO dao=new LoginDAO();
User user=new User(userName,password);
if(dao.login(userName,password)){
request.setAttribute("userbean",user); //在这设置了提交的对象,为什么在跳转后的页面读取不出来??
User user1=(User)request.getAttribute("userbean");
System.out.println(user1.getUserName()); //在这里可以正确读出来用户名.
return(mapping.findForward("Success"));
}else{
return(mapping.findForward("Failure"));
}
}
跳转后就不行了,不是这样提交和读取的吗??求教..........
rs.close();
st.close();
closeConnectionDB();
---------------------------
把这几个去掉试试!
type = "loginstruts.LoginAction"
name = "LoginForm"
scope = "request"
input = "/Login.jsp">
这段改成:
type = "loginstruts.LoginAction"
name = "LoginForm"
scope = "request"
input = "/Login.jsp">
Hello,
!
你的是个对象,直接这样输出是不行的,需要这样写
Hello,
!
当然前提你的User user=new User(userName,password);必须是返回了一个user对象,而且不为空,否则就是显示不出来。
重定向改为false,后会出现方法找不到的错误:
javax.servlet.ServletException: No getter method for property name of bean userbean
好像是重定向的问题,我再试试看...
不是什么重定向,是你的模型对象里面没有get方法。。。
Request 只能保存字符串 保存在 Session 里吧
!
测试了,首先的确必须把struts-config.xml中跳转中的redirect改为"false",才能够在跳转页获取值。我是在Welcome.jsp中用java语句获取得的。
所以,我下面这段写法也是写错了(上面的错误就是出现在这里),另外我用tcmis的写法也不行。按尽量在jsp少用java语句的原则,应该如何修改。
Hello,
!
Request 只能保存字符串 保存在 Session 里吧
错了,request是可以存对象的。
你可以去查查:reqwuest.setAttribute(String,Object);
我狂晕,原来是自己头晕搞错了,property="name"这里,自己在User中用户名属性是用userName,不是name,怪不得读不出来。。。改为:
Hello,
!