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]
> 
> 
> 

-- 
View this message in context: 
http://www.nabble.com/populating-ActionFormBean-s-tp15518640p15548570.html
Sent from the Struts - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to