当前页面: 开发资料首页 → J2SE 专题 → 问个在struts框架中request取值的问题
问个在struts框架中request取值的问题
摘要: 问个在struts框架中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:
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"));
}
}
跳转后就不行了,不是这样提交和读取的吗??求教..........
type = "loginstruts.LoginAction"
name = "LoginForm"
scope = "request"
input = "/Login.jsp">
這裡的SCOPE是"request",使得你的formbean的生命周期在LoginAction業務處理之内,業務處理完畢以後就調用formbean的reset方法。
---------------------------
System.out.println(user1.getUserName()); //在这里可以正确读出来用户名.
在業務處理内部是可以讀出來的。
我們做的時候每個jsp都要對應一個formbean。我也是剛剛學起,只知道這些,不一定正確。至於你的問題我還不清楚。
waiting.
redirect指的是是否重定向(重定向的话就不在同一个request中了)
把redirect改为"false"即可
不是这个问题,域是request,属同一个request是应该可以读出来的。在这里没必要设会话级session
redirect指的是是否重定向(重定向的话就不在同一个request中了)
把redirect改为"false"即可
改为false会出错,我再试试看...
你需要确定你这行代码是否执行,如果执行了,在页面上是不会有NULL的
request.setAttribute("userbean",user);
根据我上面写的在execute方法中测试过,下面语句执行了,并存储有对象的值
request.setAttribute("userbean",user);
问题已解决:
1、struts-config.xml中的重定向需设置为false
2、在Welcome.jsp中的是自己写错了,我的User.java这个Bean中没有name属性,其实是userName,所以改为,这样就可以读出来了。