yep both ActionFormBeans are java bean compliant here's the code
note i didn't copy any irelevevant method (dont have reset() method for any
bean)
=============================
bean1
==============================
package beans.studyProgram;
public class StudyProgram extends
org.apache.struts.validator.ValidatorActionForm {
private static final long serialVersionUID = -3131205735075358925L;
private Integer id;
private String name;
private Integer duration;
private Integer ects;
private Boolean active;
private String description;
public StudyProgram() {
super();
}
public StudyProgram (Integer id) {
this.id = id;
}
public StudyProgram(Integer id, String name, Integer duration, Integer
ects, Boolean active, String description) {
super();
this.id = id;
this.name = name;
this.duration = duration;
this.ects = ects;
this.active = active;
this.description = description;
}
public StudyProgram (StudyProgram clone) {
super ();
this.id = clone.id;
this.name = clone.name;
this.duration = clone.duration;
this.ects = clone.ects;
this.active = clone.active;
this.description = clone.description;
}
public StudyProgram clone (StudyProgram clone) {
return new StudyProgram (clone);
}
public Integer getId() {
return id;
}
public String getID () {
return id.toString();
}
public String getName() {
return name;
}
public Integer getDuration() {
return duration;
}
public Integer getEcts() {
return ects;
}
public Boolean getActive() {
return active;
}
public String getDescription() {
return description;
}
public void setId(Integer id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setDuration(Integer duration) {
this.duration = duration;
}
public void setEcts(Integer ects) {
this.ects = ects;
}
public void setActive(Boolean active) {
this.active = active;
}
public void setDescription(String description) {
this.description = description;
}
}
================================
bean2 (has bean1 as a property)
================================
package beans.department;
import beans.studyProgram.StudyProgram;
public class Department extends
org.apache.struts.validator.ValidatorActionForm {
private static final long serialVersionUID = 4766571497570970495L;
private Integer id;
private String name;
private Boolean active;
private String description;
private StudyProgram program;
public Department() {
super();
}
public Department (Integer id) {
this.id = id;
}
public Department(Integer id, String name, Boolean active, String
description, StudyProgram program) {
super();
this.id = id;
this.name = name;
this.active = active;
this.description = description;
this.program = program;
}
public Department (Department clone) {
super ();
this.id = clone.id;
this.name = clone.name;
this.active = clone.active;
this.description = clone.description;
if(clone.hasProgram())
this.program = clone.program;
}
public Department clone (Department clone) {
return new Department (clone);
}
public boolean hasProgram () {
return program!=null;
}
public Integer getId() {
return id;
}
public String getID() {
return id.toString();
}
public String getName() {
return name;
}
public Boolean getActive() {
return active;
}
public String getDescription() {
return description;
}
public StudyProgram getProgram() {
return program;
}
public void setId(Integer id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setActive(Boolean active) {
this.active = active;
}
public void setDescription(String description) {
this.description = description;
}
public void setProgram (StudyProgram program) {
this.program = program;
}
}
==================================
struts config file
==================================
<struts-config>
<form-beans>
<form-bean name="User" type="beans.user.User"
/>
<form-bean name="StudyProgram" type="beans.studyProgram.StudyProgram"
/>
<form-bean name="Department" type="beans.department.Department"
/>
.......
<action input="/view/editDepartment.jsp" name="Department" path="/SaveD"
scope="request" type="actions.department.SaveDAction">
<forward name="fail" path="/view/editDepartment.jsp"/>
</action>
=================================
jsp page (just one part) no need to copy all
=================================
<html:form action="/SaveD" method="POST">
<html:hidden property="program.id" value="<%=isNew?
program.getID() : department.getProgram().getID()%>"/>
<html:hidden property="id" value='<%=isNew? "" :
department.getID()%>'/>
===============================
tomcat trace
===============================
SEVERE: Servlet.service() for servlet action threw exception
java.lang.IllegalArgumentException: No bean specified
at
org.apache.commons.beanutils.PropertyUtilsBean.getPropertyDescriptor(PropertyUtilsBean.java:751)
at
org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:937)
at
org.apache.commons.beanutils.BeanUtilsBean.populate(BeanUtilsBean.java:811)
at org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:298)
at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:473)
at
org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:818)
at
utils.controller.RequestProcessHandler.processPopulate(RequestProcessHandler.java:384)
at
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:194)
at
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
at
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
===============================================================
Laurie Harper wrote:
auz wrote:
hope some1 can help me out, i have a Struts ActionFormBean who has a
complex
type as an attribute (also ActionFormBean), the problem is i dont know
how
to populate it, tryed everything. i presume i have to extend
RequestProcessor's populateProcess method or something like that, can
any1
help. NOTE i'm using struts 1.3.9. I have tryed all options for property
name on page using struts tags ie (property="bean1.bean2.id" or "bean2".
"bean2.id" ) and also made various setters for property bean1 but
nothing
gave any result every time i get beanUtils populate exception
tnx
i know this can be done, just dunno how, some code would also be
apritiated
Ditto :-) Post the code you're using, the stack trace for the exception
and any other relevant log output and perhaps someone can see where
you're going wrong. This should work pretty easily.
- Are both ActionFormBBean classes properly JavaBean compliant?
- Do you have the appropriate getter/setter pairs on the 'outer' bean
for the 'inner' one? (i.e. getBean2() / setBean2() methods)
- how are you instantiating the inner bean? (statically? in bean1's
constructor? in bean1's reset() method?)
You could also try cranking log levels up to debug and see if you can
spot a problem in the additional log messages.
L.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]