新手学struts 在jsp页面想用一个表单,可是一用到<html:form></html:form>标签就出现问题~希望各位高手帮帮我这菜鸟.多谢各位大虾了.
我用的是struts 的标准框架.struts.war解压出来的.
jsp 页面的代码<%@ page contentType="text/html;charset=GB2312" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>
<html:form action="/Register.do" focus="userName">
<html:text property="userName"/>
<html:text property="pwdf"/>
<html:text property="pwds"/>
<html:text property="nickName"/>
<html:text property="sex"/>
<html:text property="email"/>
<html:text property="cardId"/>
<html:text property="level"/>
<html:text property="registerDate"/>
<html:submit property="submit" value="提交"/>
<html:reset/>
</html:form>下面是错误代码:
HTTP Status 500 - --------------------------------------------------------------------------------type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception org.apache.jasper.JasperException: Cannot retrieve definition for form bean RegisterForm on action /Register.do
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:512)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause javax.servlet.ServletException: Cannot retrieve definition for form bean RegisterForm on action /Register.do
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:843)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:776)
org.apache.jsp.Register_jsp._jspService(Register_jsp.java:81)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:334)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause javax.servlet.jsp.JspException: Cannot retrieve definition for form bean RegisterForm on action /Register.do
org.apache.struts.taglib.html.FormTag.lookup(FormTag.java:767)
org.apache.struts.taglib.html.FormTag.doStartTag(FormTag.java:443)
org.apache.jsp.Register_jsp._jspx_meth_html_form_0(Register_jsp.java:98)
org.apache.jsp.Register_jsp._jspService(Register_jsp.java:74)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:334)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
note The full stack trace of the root cause is available in the Apache Tomcat/5.5.20 logs.但是要是把jsp页面的代码换成下面的就能显示:
<%@ page contentType="text/html;charset=GB2312" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>
<html:submit/>

解决方案 »

  1.   

    在struts config xml 中,看看 你的RegisterForm 有没有定义
      

  2.   

    你使用<html:form>标记就必须在struts-config.xml中配置<form-beans>
      

  3.   

    如果你在Action 里定义了name="RegisterForm"那么,你必须在 <form-beans> </form-beans>中定义这个RegisterForm
      

  4.   

    struts-config.xml的代码如下 
     <form-bean name="RegisterForm" type="myplat.web.struts.form.RegisterForm">
                <form-property name="userName" type="java.lang.String"/>
                <form-property name="pwdf" type="java.lang.String"/>
                <form-property name="pwds" type="java.lang.String"/>
                <form-property name="nickName" type="java.lang.String"/>
                <form-property name="sex" type="java.lang.String"/>
                <form-property name="email" type="java.lang.String"/>
                <form-property name="cardId" type="java.lang.String"/>
                <form-property name="level" type="java.lang.String"/>
                <form-property name="registerDate" type="java.lang.String"/>
            </form-bean>
     <action path="/Register" name="RegisterForm"   
       type="myplat.web.struts.action.RegisterAction" scope="request">
                <forward name="registerok" path="/RegisterSuccess.jsp"/>
                <forward name="registerfail" path="Register.jsp"/>
     </action>
      

  5.   

    <form-beans>
            <form-bean name="RegisterForm" type="*.RegisterForm"/>
        </form-beans>  <!-- ========== Action Mapping Definitions ============================== -->
      <action-mappings>
      
        <action    path      = "/Register"
                   type      = "*.*"
                   name      = "RegisterForm"
                   scope     = "request"
                   validate  = "true"
                   input     = "/*.jsp"
         >
            <forward name="**" path="/**.jsp" />
        </action>
      </action-mappings>
    要这样写
      

  6.   

    把 <html:form action="/Register.do" focus="userName">改成 <html:form action="Register.do" focus="userName"> 试试
      

  7.   

    <form-beans>
    在struts-config.xml中已经定义了~ 
    <form-bean> </form-bean>
    </form-beans>
    <action-mappings>
       <action>
     
       </action>
    </action-mappings>
      

  8.   

    <html:form action="/Register.do" focus="userName">
    改一下,去掉"/":<html:form action="Register.do" focus="userName">
      

  9.   

    错误代码变成这样了:
    org.apache.jasper.JasperException: Exception in JSP: /Register.jsp:74: <%@ taglib uri="/tags/struts-logic" prefix="logic" %>
    5: 
    6: 
    7: <html:form action="Register.do" focus="userName">
    8: <html:text property="userName"/>
    9: <html:text property="pwdf"/>
    10: <html:text property="pwds"/>
      

  10.   

    你的struts-config.xml没有问题应该是没有找到匹配的ACTION
      

  11.   

    action 的代码:
    package myplat.web.struts.action;import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;import myplat.web.struts.form.RegisterForm;import org.apache.commons.logging.LogFactory;
    import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionError;
    import org.apache.struts.action.ActionErrors;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;import com.mysql.jdbc.ResultSet;import db.Data;import sun.rmi.runtime.Log;public class RegisterAction extends Action {  private Log log = (Log) LogFactory.getFactory().getInstance(this.getClass().getName()); public ActionForward execute(ActionMapping arg0, ActionForm arg1, HttpServletRequest arg2, HttpServletResponse arg3) throws Exception {
               
    ActionErrors errors= new ActionErrors();//定义错误消息对象

    String userName = null;           //接受表单的参数
    String pwdf = null;
    String pwds = null;
            String nickName = null;
            String sex = null;
            String email = null;
            String cardId ;
            String level;
            String registerDate = null;

            userName = (String)((RegisterForm)arg1).getUserName();
            
            if(userName == null ){
             errors.add("fail_1",new ActionError("Register.error.a"));
             saveErrors(arg2,errors);
             return arg0.findForward("Registerfail");
            }else{
             userName = new String(userName.getBytes("ISO-8859-1"),"GB2312");
            }
            if(userName.equals("")){
             errors.add("fail_1",new ActionError("Register.error.a"));
             saveErrors(arg2,errors);
             return arg0.findForward("Registerfail");
            }
            
            pwdf= (String)((RegisterForm)arg1).getPwdf();//读取密码
            pwds= (String)((RegisterForm)arg1).getPwds();//读取第二次输入的密码
            
            if(pwdf == null||pwds==null){
             errors.add("fail_1",new ActionError("Register.error.b"));
             saveErrors(arg2,errors);
             return arg0.findForward("Registerfail");
            }
            pwdf = new String(pwdf.getBytes("ISO-8859-1"),"GB2312");
            pwds = new String(pwds.getBytes("ISO-8859-1"),"GB2312");
            
            if(pwdf.length()<6||pwds.length()<6){
             errors.add("fail_1",new ActionError("Register.error.c"));
             saveErrors(arg2,errors);
             return arg0.findForward("Registerfail");
            }
            if(!pwdf.equals(pwds)){
             errors.add("fail_1",new ActionError("Register.error.d"));
             saveErrors(arg2,errors);
             return arg0.findForward("Registerfail");
            }
            
            nickName = (String)((RegisterForm)arg1).getNickName();
            sex = (String)((RegisterForm)arg1).getSex();
    email = (String)((RegisterForm)arg1).getEmail();
    cardId = (String)((RegisterForm)arg1).getSex();
    level = (String)((RegisterForm)arg1).getCardId();
    registerDate = (String)((RegisterForm)arg1).getRegisterDate();

    if(nickName == null) {
    nickName = "";
    }
    nickName = new String(nickName.getBytes("ISO-8859-1"),"GB2312");
    if(sex == null){
    sex="*";
    }
    sex = new String(sex.getBytes("ISO-8859-1"),"GB2312");
            if(email==null){
             email="";
            }
            email=new String(email.getBytes("ISO-8859-1"),"GB2312");
    if(cardId==null){
    cardId="";
    }
    cardId=new String(cardId.getBytes("ISO-8859-1"),"GB2312");
            if(level==null){
             level="";
            }
            if(registerDate==null){
             registerDate = "";
            }
            registerDate= new  String(registerDate.getBytes("ISO-8859-1"),"GB2312");
            
            Data ds=Data.getInstance();
            String sql_1 = "select * from user where userName='"+userName+"'";
            ResultSet rs = null;
            rs= (ResultSet) ds.read(sql_1);
            if(rs!=null&&rs.next()){
             errors.add("fail_1",new ActionError("Register.error.e"));
             saveErrors(arg2,errors);
             return arg0.findForward("Registerfail");
            }
            String sql_2 = "insert user values('"+userName+"','"+pwdf+"','"+nickName+"','"+sex+"','"+email+"','"+cardId+"','"+level+"','"+registerDate+"')";
    ds.beginTransaction();
    try{
    ds.execute(sql_2);
    }
    catch(Exception e){
    ds.ErrorOccur();
    ds.commitTransaction();
    errors.add("fail_1",new ActionError("Register.error.f"));
             saveErrors(arg2,errors);
             return arg0.findForward("Registerfail");
    }
            return arg0.findForward("regiserok");
    }
    }
      

  12.   

    form的代码
    package myplat.web.struts.form;import org.apache.struts.action.ActionForm;public class RegisterForm extends ActionForm {
    private String userName;
    private String pwdf;
    private String pwds;
    private String nickName;
    private String sex;
    private String email;
    private String cardId;
    private String level;
    private String registerDate;


    public String getCardId() {
    return cardId;
    }
    public void setCardId(String cardId) {
    this.cardId = cardId;
    }
    public String getEmail() {
    return email;
    }
    public void setEmail(String email) {
    this.email = email;
    }
    public String getLevel() {
    return level;
    }
    public void setLevel(String level) {
    this.level = level;
    }
    public String getNickName() {
    return nickName;
    }
    public void setNickName(String nickName) {
    this.nickName = nickName;
    } public String getRegisterDate() {
    return registerDate;
    }
    public void setRegisterDate(String registerDate) {
    this.registerDate = registerDate;
    }
    public String getSex() {
    return sex;
    }
    public void setSex(String sex) {
    this.sex = sex;
    }
    public String getUserName() {
    return userName;
    }
    public void setUserName(String userName) {
    this.userName = userName;
    }
    public String getPwdf() {
    return pwdf;
    }
    public void setPwdf(String pwdf) {
    this.pwdf = pwdf;
    }
    public String getPwds() {
    return pwds;
    }
    public void setPwds(String pwds) {
    this.pwds = pwds;
    }}
      

  13.   

    看一下, 你有没有定义RegisterForm这个java类,如果你没有定义这个类的话,肯定会报这样的错误
      

  14.   

    你FORM里的ACTION 写错了
    要么写成
    <html:form action="Register.do" focus="userName"> 
    或者
    <html:form action="/Register" focus="userName"> 
      

  15.   

    回xizhiyao(流浪的猴子):
    试过,错误还是这样.
    我都快愁死了~~
      

  16.   

    还是这句错误org.apache.jasper.JasperException: Exception in JSP: /Register.jsp还是原来错误
      

  17.   

    register.jsp也是有的,最开始的代码就是在那
      

  18.   

    org.apache.jasper.JasperException: Exception in JSP: /Register.jsp这个是在 JSP里面例外
      

  19.   

    register.jsp  第一个字母大写呀
      

  20.   

    Register.jsp 
    他肯定是找到这个jsp文件了,要不然也不会抛出错误了
      

  21.   

    <html:form action="Register.do" focus="userName" method="POST">
      

  22.   

    是你检查Register.jsp里面错误可能有语法错误什么的 你要插入数据库的字段插入进去了吧
      

  23.   

    <html:form action="/Register.do" focus="userName">
    --------------------------
    你FORM里的ACTION 写错了,多了"/"所以找不到配置文件的正确PATH
    改成
    <html:form action="Register.do" focus="userName"> 
    或者
    <html:form action="/Register" focus="userName">
      

  24.   

    <html:form action="/Register.do" focus="userName">
    为什么不行 我就是这么用 可以找到的
      

  25.   

    <html:form action="Register.do" focus="userName"> 
    或者
    <html:form action="/Register" focus="userName">两种方法都试过了,可问题都一样.另外运行struts 的example完全 没有问题.
      

  26.   

    把<html:form>标签前加上<html:html>
    </html:form>后加上</html:html>
      

  27.   

    myplat.web.struts.form下存在RegisterForm??
    别计较FORM那里问题了 用那种方法都是可以的
      

  28.   

    因为是新手,正在学习struts,所以如果写出的东西不能看效果,就不知道那里可能出现问题,所以很着急啊~
      

  29.   

    org.apache.jasper.JasperException: Cannot retrieve definition for form bean RegisterForm on action /Register.do 意思是CONFIG文件中MAPPING没有找到ACTION期望的FROM BEAN
      

  30.   

    可能原因有很多的 先查看<form-bean>中NAME属性 是否一致大小写什么的  还要查看 表单中字段与 FORM BEAN 字段一致性 还有 FORM BEAN一定要存在
      

  31.   

    我把我的整个文件夹放到网上了,大家帮我看看~
    www.java-doc.net/myplat.rar
    呵呵~这个论坛是我的 可是没管理好,都没人~
    大家帮我看看这个问题:解决了 我再加100分
      

  32.   

    to:xizhiyao(流浪的猴子)
      你说的我也明白,什么问题要是不自己解决最后也学不到什么.
      可是我已经考虑的好几天了,也看了struts标签的使用方法.struts-config.xml配置文件的使用方法.也查了好多资料了,如果不是实在没办法,我也不会这么着急了.
    我已经好几天没有进展了,这个问题其实不大,关键是我看不到执行的效果,就没办法继续下面的学习了.
      我感谢大家对我的支持,上面大家说的方法我也试过了,问题还是存在.
      以前我学的是delphi,那时候我就经常在csdn上问问题.分当然不重要.来这的目的就是能学到东西,交到朋友!
      

  33.   

    解决了~
    羞愧了!谢谢大家了!
    问题原因是action里的代码被我放到注释中了~
    特别感谢:xizhiyao(流浪的猴子).
    呵呵
    大家可以交个朋友~
      

  34.   

    unidw(叶落) 我一般不会用QQ的 我MSN:[email protected]