最近在自学struts,正在练习登陆系统的例子程序,但是老是在ActionForm那里出现问题,就是在excute那方法里面的FORM,老是得不到login.jsp提交上来的数据,请问是什么原因?
下面是我的代码import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
public class LoginAction extends Action { @Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {

LoginForm loginForm=(LoginForm)form;
System.out.println(loginForm.getUsername());
if(loginForm.getUsername().equals("james"))
{
return mapping.findForward("loginSuccess");
}else
{
return mapping.findForward("loginFailure");
}
}}
LOGIN.JSP
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'Login.jsp' starting page</title>
    
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->  </head>
  
  <body>
    <form action="<%= request.getContextPath()%>/login.do" method="post">
     username:<input type="text" name="username"><br>
     password:<input type="password" name="password"><br>
     <input type="submit" value="Login">
    </form>
  </body>
</html>
配置文件<?xml version="1.0" encoding="UTF-8"?><struts-config>
<form-beans name="loginForm" type="LoginForm"></form-beans>
<action-mappings>
<action path="/login" type="LoginAction" name="loginForm"> 
<forward name="loginSuccess" path="/LoginSuccess.jsp"></forward>
<forward name="loginFailure" path="/LoginFailure.jsp"></forward>
</action>
</action-mappings>
</struts-config>
先谢谢

解决方案 »

  1.   

    loginForm应该先获取formbean中的实体类,然后再获取实体类中的getUsername()属性值吧!还有你的页面上的文本框name属性值应该是实体类.username吧!你这个username起的名字也不符合命名规则,java变量名遵循“骆驼命名法”应该为userName;还有你配置文件中的formBean的type属性前面没有包名吗?
      

  2.   

    <form-beans name="loginForm" type="LoginForm"></form-beans>
    把LoginForm 贴出来看看。
      

  3.   

    我这个程序没有打包,所以我觉得应该不用加包名把,还有,我得loginForm是这样的import org.apache.struts.action.ActionForm;public class LoginForm extends ActionForm{
    private String username=null;
    private String password=null;
    public String getUsername() {
    return username;
    }
    public void setUsername(String username) {
    this.username = username;
    }
    public String getPassword() {
    return password;
    }
    public void setPassword(String password) {
    this.password = password;
    }

    }
      

  4.   

    1.先把<action>属性都写全
    2.在form类实现reset方法  加上 System.out.println(“sss”); 看看有没有输出 
    如果没有输出的话就是struts.xml配置form写错了,
    3.把form改为动态form看看能不能取值?
      

  5.   

    struts1懂原理就行了吧  看struts2吧
      

  6.   


    貌似现在我接手的项目都是Struts1 的,很少用到Struts2 的。
      

  7.   

    web.xml文件写的对吗???
    <servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>

    <init-param>
    <param-name>config</param-name>
    <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
    </servlet>
    <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
    </servlet-mapping>
      

  8.   

    是不是struts-config.xml的form-bean配置错了。
      

  9.   

    <form-beans>
    <form-bean name="" type=""></form-bean>
    </form-beans>struts1的form-bean是这么配的。
      

  10.   

    web.xml中formbean的配置有问题!type应该把路径加上,用全路径,不让怎么认识它啊。
      

  11.   

    你用的是struts而不是struts2.你要获得页面的输入参数要使用struts的标签动态绑定数据,而不是用普通的html表单标签。1.使用struts标签首先要在jsp页面上导入:
    <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
    2.文本框的标签用:
    <html:text property="user.name"/>
    "user.name"是你在form里面实例化的类和对象的属性
      

  12.   

    呵呵呵,struts1我配置都是画图的
      

  13.   

    <html:form.........></html:form>
      

  14.   

    form表单里里面的地址有误!!!打断点应该是进去不去的啊!!!
      

  15.   

    <form action="<%= request.getContextPath()%>/login.do" method="post">
    你应该看看这块有没有问题 能进入action里面吗
    <action path="/login"
      

  16.   

     <form-beans name="loginForm" type="LoginForm"></form-beans>这个有问题吧
    改成这样:
     <form-beans>
    <form-bean name="loginForm" type="LoginForm">
    </form-bean>  </form-beans>
      

  17.   

    楼主应该把formbeans的配置修改成楼上那样!
      

  18.   

    你的type对应的包名写对了吗  import org.apache.struts.action.ActionForm;<form-beans name="loginForm" type="LoginForm"></form-beans>
      

  19.   

    都没有实体类,也没在配置文件中
    <form-bean name="loginForm" type="LoginForm">
    </form-bean> 
      

  20.   

    其实现在大型项目用struts2的很少,,struts2效率太低可以看看spring MVC