In general, you shouldn't need to specify the form name or type in the
JSP at all. The form tag will lookup that up from the struts-config.xml,
according to where you are submitting the form (action path = action
path).
<html:form action="/insertQuestion">
<html:text property="questionDesc"/>
</html:form>
<action path="/insertQuestion"
type="com.companyname.actionmap.InsertQuestionAction"
name="questionForm"
scope="request"
validate="false">
<forward name="success" path="/strutstest.jsp"/>
</action>
should be all you need.
-- Ted Husted, Husted dot Com, Fairport NY USA.
-- Custom Software ~ Technical Services.
-- Tel 716 737-3463.
-- http://www.husted.com/about/struts/
Bill Clinton wrote:
>
> Hello,
> I just am starting out with struts, and I have a question. I
> started with this syntax in my test jsp:
>
> <html:form name="questionForm" action="insertQuestion">
> <html:text property="questionDesc"/>
> </html:form>
>
> and this in my struts-config.xml:
>
> <form-bean name="questionForm"
> type="com.companyname.actionform.QuestionForm"/>
>
> but I was getting this error:
>
> javax.servlet.jsp.JspException: Must specify type attribute if name is
> specified
>
> #########################
>
> After searching this list's archives, I saw a reply to a similar
> question from Craig McClanahan that states:
>
> > If you specify name here, you must also specify type.
> >
> > If you change this to:
> >
> > <form:form action="regstep1.do"> The tag will be smart enough
> > to figure out what form bean name you want, without
> > having to specify it both here and in struts-config.xml.
> >
>
> so, to test, I specified the name in my jsp html:form tag so it looked
> like this:
>
> <html:form name="questionForm"
> type="com.companyname.actionform.QuestionForm" action="insertQuestion">
>
> and this worked.
>
> #########################
>
> But, I don't want to have to list the classnames in the JSPs, so I tried
> to follow craigs suggestion. I changed the lines in the JSP to:
>
> <html:form name="questionForm" action="insertQuestion">
>
> and tried this in my struts-config.xml:
>
> <form-bean name="questionForm"
> type="com.companyname.actionform.QuestionForm"/>
>
> <action path="/insertQuestion"
> type="com.companyname.actionmap.InsertQuestionAction"
> name="questionForm"
> scope="request"
> validate="false">
> <forward name="success" path="/strutstest.jsp"/>
> </action>
>
> but now I get this error:
> javax.servlet.jsp.JspException: Cannot find ActionMappings or
> ActionFormBeans collection
>
> I also searched on this error, but the messages I found did not seem to
> match my situation.
>
> #######################################
>
> Since it works when I specify both the name and type in the html:form
> tag, I am starting to wonder if my struts-config.xml (in my WEB-INF dir)
> is being read. Is it enough to put this file in the WEB-INF directory?
>
> Also, when I had the name in my html:form tag and the type in the
> form-bean tag, it seemed obvious how these two things were linked (even
> thought this was not correct).
>
> When I follow Craig's suggestion, I am unsure how "The tag will be smart
> enough to figure out what form bean name you want." Does it use the JSP
> name to link to the "path" attribute of the action tag, and link the
> name attribute of the action tag to the name attribute of the form-bean tag?
>
> Sorry about the length of this message, but I wanted to try to be as
> specific as possible about the problem.
>
> Also, if anyone knows of any good documentation links, I am open to
> suggestions. Other than the docs on the apache site, I have only found
> www.husted.com , which has lots of useful tips. Any others out there?
>
> Thanks, Bill