站内搜索: 请输入搜索关键词

当前页面: 开发资料首页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>
<br/> 用户登录页面<br/>

</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,
!


↑返回目录
前一篇: 请介绍一个实用免费的带 Java 绑定的 CORBA
后一篇: 提高J2EE测试速度