新手学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/>
我用的是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/>
<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>
<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>
要这样写
在struts-config.xml中已经定义了~
<form-bean> </form-bean>
</form-beans>
<action-mappings>
<action>
</action>
</action-mappings>
改一下,去掉"/":<html:form action="Register.do" focus="userName">
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"/>
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");
}
}
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;
}}
要么写成
<html:form action="Register.do" focus="userName">
或者
<html:form action="/Register" focus="userName">
试过,错误还是这样.
我都快愁死了~~
他肯定是找到这个jsp文件了,要不然也不会抛出错误了
--------------------------
你FORM里的ACTION 写错了,多了"/"所以找不到配置文件的正确PATH
改成
<html:form action="Register.do" focus="userName">
或者
<html:form action="/Register" focus="userName">
为什么不行 我就是这么用 可以找到的
或者
<html:form action="/Register" focus="userName">两种方法都试过了,可问题都一样.另外运行struts 的example完全 没有问题.
</html:form>后加上</html:html>
别计较FORM那里问题了 用那种方法都是可以的
www.java-doc.net/myplat.rar
呵呵~这个论坛是我的 可是没管理好,都没人~
大家帮我看看这个问题:解决了 我再加100分
你说的我也明白,什么问题要是不自己解决最后也学不到什么.
可是我已经考虑的好几天了,也看了struts标签的使用方法.struts-config.xml配置文件的使用方法.也查了好多资料了,如果不是实在没办法,我也不会这么着急了.
我已经好几天没有进展了,这个问题其实不大,关键是我看不到执行的效果,就没办法继续下面的学习了.
我感谢大家对我的支持,上面大家说的方法我也试过了,问题还是存在.
以前我学的是delphi,那时候我就经常在csdn上问问题.分当然不重要.来这的目的就是能学到东西,交到朋友!
羞愧了!谢谢大家了!
问题原因是action里的代码被我放到注释中了~
特别感谢:xizhiyao(流浪的猴子).
呵呵
大家可以交个朋友~