Hi,
I am writing a small page based on struts guidelines for creating map-backed forms. I am using struts 1.1. I have a jsp in which I have some dynamic fields. I used a for loop for these,currently. In the ActionForm, I have declared a HashMap for collecting values of these fields. However, when I submit the page, I am getting the error- javax.servlet.ServletException: BeanUtils.populate Root cause: java.lang.IllegalArgumentException: No bean specified. Pl. help me understand what went wrong.
The following is the jsp page
<%@ page language="java" session="true"%>
<!-- Imports-->
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<html:html locale="true">
<!--Apply Stylesheet--> <head>
<link href="./layouts/PrimeCss.css" type="text/css" rel="stylesheet"> </head>
<body norepeat bottommargin="0" leftmargin="0" rightmargin="0" topmargin="0" bgproperties="fixed">
<html:form action="/createQuestion" focus="questionName" name="createQuestionForm" type="com.trx.kms.questionbank.CreateQuestionForm">
<bean:message key="questionbank.createquestion.pagetitle"/>
<bean:message key="questionbank.createquestion.name"/> <html:text property="questionName" style="width:195px" maxlength="100"/>
<bean:message key="questionbank.createquestion.description"/> <html:textarea property="questionDesc" cols="65" rows="12"/>
<% for (int i=0; i <=2; i++) { String name = "value(foo-" + i + ""; %> <bean:message key="questionbank.createquestion.option"/> <html:text property="<%= name %>" />
<%} %> <html:image page="/layouts/submit.jpg" property="submit" onclick="onSubmitClick();"/> <html:image page="/layouts/cancel.jpg" property="reset" />
</html:form> </body> </html:html>
The following is the ActionForm class
package com.trx.kms.questionbank; import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import java.util.HashMap;
import java.util.Map;
import java.util.Iterator;
public final class CreateQuestionForm extends ActionForm{
private String questionName=null;
private String questionDesc=null;
private String submit=null;
private String reset=null;
private final Map values = new HashMap();
public void setValue(String key, Object value) {
values.put(key, value); }
public Object getValue(String key) {
return values.get(key); }
public String getQuestionDesc() {
return questionDesc; }
public String getQuestionName() {
return questionName; }
public void setQuestionDesc(String string) {
questionDesc = string; }
public void setQuestionName(String string) {
questionName = string; }
public String getReset() {
return reset; }
public String getSubmit() {
return submit; }
public void setReset(String string) {
reset = string; }
public void setSubmit(String string) {
submit = string; }
public String getQuestions()
{
StringBuffer sb = new StringBuffer();
if ((values!=null && !values.isEmpty())) {
Iterator it = values.keySet().iterator();
while (it.hasNext()) {
String paramName = (String)it.next();
String paramValue = (String)values.get(paramName);
sb.append(paramName);
sb.append(paramValue);
} } return sb.toString();
}
public void reset(ActionMapping mapping, HttpServletRequest request) {
this.questionName=null;
this.questionDesc=null;
}
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
ActionErrors errors = new ActionErrors();
return errors; } }
The following is the action class
package com.trx.kms.questionbank;
import org.apache.struts.action.Action;
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 javax.servlet.http.*;
import javax.servlet.*;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Iterator;
public final class CreateQuestionAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
String questions=((CreateQuestionForm)form).getQuestions();
ActionErrors errors = new ActionErrors();
if (!errors.isEmpty()) {
saveErrors(request, errors);
return (new ActionForward(mapping.getInput())); }
return (mapping.findForward("success"); }
}
I am writing a small page based on struts guidelines for creating map-backed forms. I am using struts 1.1. I have a jsp in which I have some dynamic fields. I used a for loop for these,currently. In the ActionForm, I have declared a HashMap for collecting values of these fields. However, when I submit the page, I am getting the error- javax.servlet.ServletException: BeanUtils.populate Root cause: java.lang.IllegalArgumentException: No bean specified. Pl. help me understand what went wrong.
The following is the jsp page
<%@ page language="java" session="true"%>
<!-- Imports-->
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<html:html locale="true">
<!--Apply Stylesheet--> <head>
<link href="./layouts/PrimeCss.css" type="text/css" rel="stylesheet"> </head>
<body norepeat bottommargin="0" leftmargin="0" rightmargin="0" topmargin="0" bgproperties="fixed">
<html:form action="/createQuestion" focus="questionName" name="createQuestionForm" type="com.trx.kms.questionbank.CreateQuestionForm">
<bean:message key="questionbank.createquestion.pagetitle"/>
<bean:message key="questionbank.createquestion.name"/> <html:text property="questionName" style="width:195px" maxlength="100"/>
<bean:message key="questionbank.createquestion.description"/> <html:textarea property="questionDesc" cols="65" rows="12"/>
<% for (int i=0; i <=2; i++) { String name = "value(foo-" + i + ""; %> <bean:message key="questionbank.createquestion.option"/> <html:text property="<%= name %>" />
<%} %> <html:image page="/layouts/submit.jpg" property="submit" onclick="onSubmitClick();"/> <html:image page="/layouts/cancel.jpg" property="reset" />
</html:form> </body> </html:html>
The following is the ActionForm class
package com.trx.kms.questionbank; import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import java.util.HashMap;
import java.util.Map;
import java.util.Iterator;
public final class CreateQuestionForm extends ActionForm{
private String questionName=null;
private String questionDesc=null;
private String submit=null;
private String reset=null;
private final Map values = new HashMap();
public void setValue(String key, Object value) {
values.put(key, value); }
public Object getValue(String key) {
return values.get(key); }
public String getQuestionDesc() {
return questionDesc; }
public String getQuestionName() {
return questionName; }
public void setQuestionDesc(String string) {
questionDesc = string; }
public void setQuestionName(String string) {
questionName = string; }
public String getReset() {
return reset; }
public String getSubmit() {
return submit; }
public void setReset(String string) {
reset = string; }
public void setSubmit(String string) {
submit = string; }
public String getQuestions()
{
StringBuffer sb = new StringBuffer();
if ((values!=null && !values.isEmpty())) {
Iterator it = values.keySet().iterator();
while (it.hasNext()) {
String paramName = (String)it.next();
String paramValue = (String)values.get(paramName);
sb.append(paramName);
sb.append(paramValue);
} } return sb.toString();
}
public void reset(ActionMapping mapping, HttpServletRequest request) {
this.questionName=null;
this.questionDesc=null;
}
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
ActionErrors errors = new ActionErrors();
return errors; } }
The following is the action class
package com.trx.kms.questionbank;
import org.apache.struts.action.Action;
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 javax.servlet.http.*;
import javax.servlet.*;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Iterator;
public final class CreateQuestionAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
String questions=((CreateQuestionForm)form).getQuestions();
ActionErrors errors = new ActionErrors();
if (!errors.isEmpty()) {
saveErrors(request, errors);
return (new ActionForward(mapping.getInput())); }
return (mapping.findForward("success"); }
}