程序目的:通过提交用户名和密码跳转到相应页面,成功就跳到success页面,否则跳到fail页面
struts-config.xml<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"><struts-config>
  <data-sources />
  <form-beans>
   <form-bean name="loginForm" type="form.LoginForm"></form-bean>
  </form-beans>
  <global-exceptions />
  <global-forwards />
  <action-mappings>
   <action path="/login" name = "loginForm" scope = "request" type = "action.LoginAction" parameter = "method"
   attribute = "loginForm" input = "/login.jsp" validate = "true" >
   <forward name="success" path="/success.jsp"></forward>
   <forward name="error" path="/error.jsp"></forward>
   </action>
  </action-mappings>
  <message-resources parameter="ApplicationResources" />
</struts-config>
login.jsp<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%> 
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<html> 
<head>
<title>JSP for LoginForm form</title>
</head>
<body>
<html:form action="/login?method=login">
用户名 : <html:text property="username"/><html:errors property="username"/><br/>
密&nbsp;&nbsp;码 : <html:password property="userpass"/><html:errors property="userpass"/><br/>
<html:submit/><html:cancel/>
</html:form>
</body>
</html>
LoginActionpackage action;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.DynaActionForm;import form.LoginForm;public class LoginAction extends Action{
public ActionForward login(ActionMapping actionmapping,ActionForm actionForm,
HttpServletRequest request,HttpServletResponse response){
DynaActionForm loginForm = (DynaActionForm)actionForm;
HttpSession session = request.getSession();
//解析请求参数
String username = (String)loginForm.get("username");
String userpass = (String)loginForm.get("userpass");

String actionpath = "error";
if("joe".equals(username) & "joe".equals(userpass)){
session.setAttribute("name", username);
actionpath = "success";
}
return actionmapping.findForward(actionpath);
}
}
提交用户名密码后跳到http://localhost:8080/logindemo01/login.do?method=login,但是结果一片空白
求解答?

解决方案 »

  1.   

    拦截器把login.jsp也给拦截了?
      

  2.   

    struts-config.xml的parameter = "method"去掉
    LoginAction的:
    DynaActionForm loginForm = (DynaActionForm)actionForm;
    改为LoginForm loginForm=(ActionForm)actionForm;
    这样试试看看
      

  3.   

    对了,还有个地方改改 <body>
            <html:form action="login.do"
                用户名 : <html:text property="username"/><html:errors property="username"/><br/>
                密&nbsp;&nbsp;码 : <html:password property="userpass"/><html:errors property="userpass"/><br/>
                <html:submit/><html:cancel/>
            </html:form>
      

  4.   

    你那肯定提交不了了,你只是连接到那个action 里,执行那个方法,form根本就没有做提交,怎么会不错呢。你在form里放一个隐藏域<input type=hidden name=method value=login/> 当点击登录的时候房form提交到action里。这样数据才能提交过去。
      

  5.   

    回3L:改成你那样是可以的,之前我有试过
    回4L:请问是把<input type=hidden name=method value=login/>放在
     <html:form action="/login?method=login"></html:form>之中吗?这样试了也不行,请问还有什么办法吗?
      

  6.   


    package action;import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;
    import org.apache.struts.action.DynaActionForm;import form.LoginForm;public class LoginAction extends DispatchAction{
    //既然你说了要用DispatchAction,那么你这个action应该继承DispatchAction
        public ActionForward login(ActionMapping actionmapping,ActionForm actionForm,
                HttpServletRequest request,HttpServletResponse response){
            LoginForm loginForm = (LoginForm)actionForm;
            //你配置文件中用的是LoginForm,不是虚拟form
            HttpSession session = request.getSession();
            //解析请求参数
            String username = (String)loginForm.get("username");
            String userpass = (String)loginForm.get("userpass");
            
            String actionpath = "error";
            if("joe".equals(username) & "joe".equals(userpass)){
                session.setAttribute("name", username);
                actionpath = "success";
            }
            return actionmapping.findForward(actionpath);
        }
    }
    如此如此,这般这般,就可以了!
      

  7.   

    谢谢6楼的同学,大意了,忘了继承DispatchAction
    请问 DynaActionForm loginForm = (DynaActionForm)actionForm;
    这句代码怎么会错呢?我照着书上打的,书本写错了?