Holy cow!  Yes, you gave enough details..

Looking at JSPs a few things jump out:

* You aren't using any of the <nested> tags.  To take advantage of the nested 
extension, you have to use the <nested:xyz> equivalent of the usual tags.  So, instead 
of <html:form> you should use <nested:form>, instead of <html:text> you should use 
<nested:text>.  Of course, make sure you have the necessary taglib statement for the 
nested tags.  This should fix a lot of your problems
* Even though 64_eng_del.jsp is an included file, it ends with a </body></html>.  You 
probably don't want to leave that for the *includer* -- your top-level JSP.  Remember 
the top-level has an open form tag that it closes at the end of all includes

Give this a shot.

Sri

-----Original Message-----
From: Parnell, Giles (AU - Sydney) [mailto:g.parnell@;eclipsegroup.com.au] 
Sent: Sunday, November 03, 2002 6:02 PM
To: 'Struts Users Mailing List'
Subject: RE: Nested properties of form bean not being updated !


Hi Sri

Thanks for getting back to me. I've included 
1. A portion of my struts config:
        - My form bean definition
        - And the action mapping

2. My action class
3. My JSPs, which are comprised of -
        - My top level jsp... that contains the form bean definition, and the 
forwarding action name
        - The include '64_eng_del.jsp' contains the nested bean

4. The two Value objects
        - VOEPR, (which contains VOEngagementDetails) and
        - VOEngagementDetails

As i said before.... all the top level attributes of the VOEPR are fine ... i can 
update them. It's the VOEngagement Details where things fall over. Nothing seems to be 
get set here. When i trace through into my action - the 'form' object doesn't seem to 
contain these nested attributes.

Sri .. any help would be great. 

Cheers
Giles

PS: Hope this is enough info this time :)


############################################################################
#####
1) Struts config 
############################################################################
#####

  <!-- ========== Start Form Bean Definitions ==============================
-->
  <form-beans>

    <!-- VOEPR form bean -->
    <form-bean      name="voEPR"
                    type="au.com.eclipsegroup.egem.valueObject.VOEPR"/> 
    
  <!-- ========== End of Form Bean Definitions ============================
-->

  <!-- ========== Start Action Mapping Definitions =======================
-->

   <action    path="/updateEPR"
                          name="voEPR"
              type="au.com.eclipsegroup.egem.actions.cde.UpdateEPRAction"
             scope="session"

          validate="false">     
     <forward name="success"              path="/preCounseleeTaskList"/>
     <forward name="failure"              path="/jsp/errors.jsp"/>
    </action>
  
  <!-- ========== End Action Mapping Definitions ========================
-->

############################################################################
#####
2) Heres the relevant portions of my action class: 
############################################################################
#####

        blaa blaaa......
                
                // Get the Plan off the session
                if (theSession.getAttribute("voCDE") != null)
                {
                        voCDE = (VOEPR) theSession.getAttribute("voCDE");
                        log.debug("The EPR obtained from session was - " + 
voCDE.getEPRID());
                        
                        voCDE = (VOEPR) form;
                }
                else
                {
                        log.error("The EPR Details have been lost on the
session");
                        throw new ServletException("The EPR Details have
been lost on the session");
                }
                
                // Create the facade
                try
                {
                        EJBHomeFactory.init();
                        AssessmentFacadeHome facadeHome = 
(AssessmentFacadeHome)EJBHomeFactory.lookUpHome(AssessmentFacadeHome.class);
                        AssessmentFacade facade = facadeHome.create();
                        
                        
                        /** Lets try and update ... wot the hell
                         * Pass in the employeeID so we know whether it was
the counselee or the
                         * counsellor updating the EPR.
                         */
                        facade.updateCDE(voCDE, employeeID);
                }
                catch(CreateException ce)
                {
                        log.error("Failed to create facade", ce);
                        throw new ServletException("Unable to conatct
application facade.");
                }
                catch (IncorrectVersionException e)
                {
                        log.error("Someone has updated an element of your
Plan while your were editing. Please redo" , e);
                        throw new ServletException("Someone has updated an
element of your Plan while your were editing. Please redo");            
                }


        blaa blaaa......


        if(errors.empty())
                {
                        log.debug("success: Forward maps to " + 
mapping.findForward("success").getName());
                        return (mapping.findForward("success"));
                }
                else
                {
                        log.debug("has errors: Forward maps to " + 
mapping.findForward("failure").getName());
                        return (mapping.findForward("failure"));

                }

############################################################################
#####
3.i) HERES MY TOP LEVEL JSP.... 
############################################################################
#####

<%-- ** Start of createEPR ** --%>

<%@ page language="java" import="au.com.eclipsegroup.egem.valueObject.VOEPR,
java.util.*" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-form.tld" prefix="form" %>

<% final String ctxPath = request.getRequestURI();%> <%=ctxPath%>

<html>
<head>
<title>gem</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <script 
language="JavaScript" src="../../static/js/rollUp.js"></script>
<link rel="stylesheet" href="../../static/css/default.css" type="text/css"> </head>

<body bgcolor="#FFFFFF" text="#000000" leftmargin="0" topmargin="0" marginwidth="0" 
marginheight="0">

<html:form name="voEPR" scope="session" 
type="au.com.eclipsegroup.egem.valueObject.VOEPR" action="/updateEPR.do">
        
        <%-- Top Nav --%>
        <jsp:include page="../../includes/00_nav_top.jsp"/>
        
        <%-- Engagement Details --%>
        <jsp:include page="../../includes/64_eng_del.jsp"/>

        <%-- Engagement Goals --%>
        <jsp:include page="../../includes/11_dis_eng.jsp"/>

        <%-- Performance against competencies --%>
        <jsp:include page="../../includes/29_rat_aga.jsp"/>

        <%-- Achievements --%>
        <jsp:include page="../../includes/01_ach_dev.jsp"/>
        
        <%-- Used for the comments page --%>
        <input type="hidden" name="commentType" value="">

        <%-- Comments --%>
        <jsp:include page="../../includes/10_dis_com.jsp"/>

        <%-- Personal Details --%>
        <jsp:include page="../../includes/23_per_det.jsp"/>

        <%-- Overall Rating --%>                        
        <jsp:include page="../../includes/21a_ove_rat_epr.jsp"/>
        
        <%-- Buttons --%>
        <jsp:include page="../../includes/04_but_fra1.jsp"/>
 
</html:form>

<%-- ** End of createEPR ** --%>

############################################################################
#####
3.ii) HERRE'S MY NESTED INCLUDE THAT CONTAINS THE NESTED OBJECT 
############################################################################
#####

<%-- Start of Engagement Details --%>

<%@ page language="java" 
import="au.com.eclipsegroup.egem.valueObject.VOEngagementDetails" %> <%@ taglib 
uri="/WEB-INF/struts-html.tld" prefix="html" %> <%@ taglib 
uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib 
uri="/WEB-INF/struts-form.tld" prefix="form" %>

<link rel="stylesheet" href="../../static/css/default.css" type="text/css"> <link 
rel="stylesheet" type="text/css" href="../../static/js/spiffy/spiffyCal_v2_1.css">
<script language="JavaScript" src="../../static/js/spiffy/spiffyCal_v2_1.js"></script>

<div>
        <table width="100%" border="0" cellspacing="0" cellpadding="0" align="center">
                <tr class="tbl_top" onClick="rollUp('div64', this)" 
onMouseOut="MM_swapImgRestore()" 
onMouseOver="MM_swapImage('Image16','','../../static/images/titles/arrow_rig
ht_f2.gif',1)">
                        <td width="20" class="tbl_top"><a href="#"><img name="Image16" 
border="0" src="../../static/images/titles/arrow_right.gif"
width="24" height="27"></a></td>
                        <td
background="../../static/images/titles/ttl_bg.gif" class="tbl_top"><img 
src="../../static/images/titles/ttl_eng_det.gif" width="123" height="12" 
alt="engagement details"></td>
                </tr>
        </table>
</div>

<div id="div64" style="overflow: hidden"> 
        <table width="100%" border="0" cellspacing="0" cellpadding="0" align="center">
                <tr> 
                        <%-- Review year --%>
                        <td class="tbl_2" width="197" height="25">review
year</td>
                        <td class="tbllefttext" width="257"><bean:write
name="voCDE" property="reviewYear"/></td>
                        
                <tr> 
                        <%-- Engagement Client--%>
                        <td class="tbl_2" height="25">* engagement
client</td>
                        <td class="tbllefttext" width="257" colspan="2">
*********************** <%-- THESE ARE THE BITS NOT WORKING --%> 
                                <html:text size="50" name="voCDE" 
property="voEngagementDetails.engagementClient"/ >
                        </td>
                </tr> 
                <tr> 
                        <%-- Engagement name --%>
                        <td class="tbl_2" width="197" height="25">*
engagement name</td>
                        <td class="tbllefttext" colspan="2"> 
*********************** <%-- THESE ARE THE BITS NOT WORKING --%> 
                                <html:text size="50" name="voCDE" 
property="voEngagementDetails.engagementName" />
                        </td>
                </tr>
                <tr> 
                        <%-- Engagement ref no --%>
                        <td class="tbl_2" width="197" height="25">engagement
ref no</td>
                        <td class="tbllefttext" colspan="2"> 
*********************** <%-- THESE ARE THE BITS NOT WORKING --%> 
                                <html:text size="25" maxlength="25"
name="voCDE" property="voEngagementDetails.engagementRefNo"/ >
                        </td>
                </tr>
                <tr> 
                        <%-- XXX Engagement period --%>
                        <td class="tbl_2" width="197" height="25">*
engagement period</td>
                        <td class="tbllefttext" colspan="2"> 
                                <table width="350" border="0"
cellspacing="0" cellpadding="0">
                                        <tr> 
                                                <td width="29"
class="normal"> from</td>
                                                <td class="normal"
width="300"> 
*********************** <%-- THESE ARE THE BITS NOT WORKING --%> 
                                                        <html:text size="50"
name="voCDE" property="voEngagementDetails.engagementPeriodFrom" />
                                                </td>
                                                <td width="30"
class="normal"> to</td>
                                                <td class="normal"
width="355"> 
                                                        <!-- html:text
size="50" name="voCDE" property="voEngagementDetails.engagementPeriodTo" /
-->
                                                        <script 
language="javascript">cal2.writeControl();</script>
                                                </td>
                                        </tr>
                                </table>
                        </td>
                </tr>
                <tr>
                        <%-- Engagement reviewer --%> 
                        <td class="tbl_2" width="197" height="25">engagement 
reviewer</td>
                        <td class="tbllefttext">
                                <table width="520" border="0"
cellspacing="0" cellpadding="0">
                                        <tr>
*********************** <%-- THESE ARE THE BITS NOT WORKING --%> 
                                                <td><html:text size="50"
name="voCDE" property="voEngagementDetails.engagementReviewerName" /></td>
                                                <td align="right"><a
href="/preSearchForReviewer.do" class="button_3" 
onMouseOver="MM_displayStatusMsg('SELECT REVIEWER');return document.MM_returnValue" 
onMouseOut="MM_displayStatusMsg('');return
document.MM_returnValue">SELECT REVIEWER</a></td>
                                        </tr>
                                </table>
                                
                        </td>
                </tr>
                <tr> 
                        <%-- Role on engagement --%>
                        <td class="tbl_2" width="197" height="25">role on 
engagement</td>
                        <td class="tbllefttext" colspan="2"> 
                                <!--textarea name="textfield22"
class="formfield" cols="100" rows="2"></textarea-->
*********************** <%-- THESE ARE THE BITS NOT WORKING --%> 
                                <html:text size="50" name="voCDE" 
property="voEngagementDetails.roleOnEngagement" />
                        </td>
                </tr>
        </table>

</div>

<%-- End of Engagement Details --%>


</body>
</html> 

############################################################################
#####
4) VO - VOEPR (which contains VOEngagementDetails) 
############################################################################
#####

package au.com.eclipsegroup.egem.valueObject;
import java.util.ArrayList;
import java.util.Collection;

import org.apache.struts.action.ActionForm;
/**
 * @author gparnell
 * @date Sep 20th, 2002
 * 
 */
public class VOEPR extends ActionForm
{
        // NB: All comments are Collections of VOComment
        private Integer employeeID;
        private Integer reviewYear;
        private Integer eprID;
        private String status;
        private long version;
        
        private VOEngagementDetails voEngagementDetails;
        
        // Collection of VOEPRGoals
        private Collection eprGoals = new ArrayList();
        
        // Collection of VOCompetency's
        private Collection competencies = new ArrayList();

        private VOScale voScale;
        private Collection comments;
        
        private Collection signalsComments;
        private Collection businessObjectiveComments;   

        private String achievements;
        private String developmentNeeds;

        private Collection values;

        /** The ID of the CP for which this engagement was based on */
        private Integer careerPlanID;




        /** Default Constructor for VOEPR */
        public VOEPR() {}
        
        /** Another Constructor for VOEPR */
        public VOEPR(Integer aEmployeeID, Integer aReviewYear, Integer aEPRID, String 
aStatus, long aVersion, 
        
VOEngagementDetails aEngagementDetails,
                                                          Collection
aEPRGoals, Collection aCompetencies, VOScale scale,
                                                          Collection
aComments, String aAchievementments, String aDevNeeds)
        {
                this.employeeID = aEmployeeID;
                this.reviewYear = aReviewYear;
                this.eprID = aEPRID;
                this.status = aStatus;
                this.version = aVersion;
                this.voEngagementDetails = aEngagementDetails;
                this.eprGoals = aEPRGoals;

                this.competencies = aCompetencies;
                this.comments = aComments;
                this.developmentNeeds = aDevNeeds;
                this.achievements = aAchievementments;
                this.voScale = scale;
                
                
        }
        
        // Constructor used for creating a validator VO in the Employee Delegate
        public VOEPR(Integer aEmployeeID, Integer aReviewYear)
        {
                this.employeeID = aEmployeeID;
                this.reviewYear = aReviewYear;
        }
        
        
        
        /**
         * Returns the cdeID.
         * @return Integer
         */
        public Integer getEPRID() {
                return eprID;
        }
        
        /**
         * Returns the employeeID.
         * @return Integer
         */
        public Integer getEmployeeID() {
                return employeeID;
        }
        
        /**
         * Returns the eprGoals.
         * @return Collection
         */
        public Collection getEprGoals() {
                return eprGoals;
        }

        
        /**
         * Returns the status.
         * @return String
         */
        public String getStatus() {
                return status;
        }

        /**
         * Returns the version.
         * @return long
         */
        public long getVersion() {
                return version;
        }

        /**
         * Returns the voEngagementDetails.
         * @return VOEngagementDetails
         */
        public VOEngagementDetails getVoEngagementDetails() {
                return voEngagementDetails;
        }

        /**
         * Sets the cdeID.
         * @param cdeID The cdeID to set
         */
        public void setEPRID(Integer eprID) {
                this.eprID= eprID;
        }

        /**
         * Sets the employeeID.
         * @param employeeID The employeeID to set
         */
        public void setEmployeeID(Integer employeeID) {
                this.employeeID = employeeID;
        }
        
        /**
         * Sets the eprGoals.
         * @param eprGoals The eprGoals to set
         */
        public void setEprGoals(Collection eprGoals) {
                this.eprGoals = eprGoals;
        }

        /**
         * Sets the status.
         * @param status The status to set
         */
        public void setStatus(String status) {
                this.status = status;
        }

        /**
         * Sets the version.
         * @param version The version to set
         */
        public void setVersion(long version) {
                this.version = version;
        }

        /**
         * Sets the voEngagementDetails.
         * @param voEngagementDetails The voEngagementDetails to set
         */
        public void setVoEngagementDetails(VOEngagementDetails
voEngagementDetails) {
                this.voEngagementDetails = voEngagementDetails;
        }

        /**
         * Returns the reviewYear.
         * @return Integer
         */
        public Integer getReviewYear() {
                return reviewYear;
        }

        /**
         * Sets the reviewYear.
         * @param reviewYear The reviewYear to set
         */
        public void setReviewYear(Integer reviewYear) {
                this.reviewYear = reviewYear;
        }

        /**
         * Returns the competencies.
         * @return Collection
         */
        public Collection getCompetencies() {
                return competencies;
        }

        /**
         * Sets the competencies.
         * @param competencies The competencies to set
         */
        public void setCompetencies(Collection competencies) {
                this.competencies = competencies;
        }


        /** Add and Remove methods for the VOs */
        public void addCompetency(VOCompetency comp)
        {
                this.getCompetencies().add(comp);
        }
        
        public void removeCompetency(VOCompetency comp)
        {
                this.getCompetencies().remove(comp);
        }
        
        public void addEPRGoal(VOGoal goal)
        {
                this.getEprGoals().add(goal);
        } 
        
        public void removeEPRGoal(VOGoal goal)
        {
                this.getEprGoals().remove(goal);
        }

        /**
         * Returns the comments.
         * @return Collection
         */
        public Collection getComments() {
                return comments;
        }

        /**
         * Sets the comments.
         * @param comments The comments to set
         */
        public void setComments(Collection comments) {
                this.comments = comments;
        }

        /**
         * Returns the achievements.
         * @return String
         */
        public String getAchievements()
        {
                return achievements;
        }

        /**
         * Returns the developmentNeeds.
         * @return String
         */
        public String getDevelopmentNeeds()
        {
                return developmentNeeds;
        }

        /**
         * Sets the achievements.
         * @param achievements The achievements to set
         */
        public void setAchievements(String achievements)
        {
                this.achievements = achievements;
        }

        /**
         * Sets the developmentNeeds.
         * @param developmentNeeds The developmentNeeds to set
         */
        public void setDevelopmentNeeds(String developmentNeeds)
        {
                this.developmentNeeds = developmentNeeds;
        }

        /**
         * Returns the voScale.
         * @return VOScale
         */
        public VOScale getVoScale()
        {
                return voScale;
        }

        /**
         * Sets the voScale.
         * @param voScale The voScale to set
         */
        public void setVoScale(VOScale voScale)
        {
                this.voScale = voScale;
        }

        /**
         * Returns the values.
         * @return Collection
         */
        public Collection getValues()
        {
                return values;
        }

        /**
         * Sets the values.
         * @param values The values to set
         */
        public void setValues(Collection values)
        {
                this.values = values;
        }

        /**
         * Returns the businessObjectiveComments.
         * @return Collection
         */
        public Collection getBusinessObjectiveComments()
        {
                return businessObjectiveComments;
        }

        /**
         * Returns the signalsComments.
         * @return Collection
         */
        public Collection getSignalsComments()
        {
                return signalsComments;
        }

        /**
         * Sets the businessObjectiveComments.
         * @param businessObjectiveComments The businessObjectiveComments to set
         */
        public void setBusinessObjectiveComments(Collection
businessObjectiveComments)
        {
                this.businessObjectiveComments = businessObjectiveComments;
        }

        /**
         * Sets the signalsComments.
         * @param signalsComments The signalsComments to set
         */
        public void setSignalsComments(Collection signalsComments)
        {
                this.signalsComments = signalsComments;
        }

        /**
         * Returns the careerPlanID.
         * @return Integer
         */
        public Integer getCareerPlanID()
        {
                return careerPlanID;
        }

        /**
         * Sets the careerPlanID.
         * @param careerPlanID The careerPlanID to set
         */
        public void setCareerPlanID(Integer careerPlanID)
        {
                this.careerPlanID = careerPlanID;
        }


############################################################################
#####
4.ii) VOEngagemenbtDetails 
############################################################################
#####

package au.com.eclipsegroup.egem.valueObject;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;

import org.apache.struts.action.ActionForm;
/**
 * @author gparnell
 * @date Sep 20th, 2002
 * 
 */
public class VOEngagementDetails extends ActionForm
{
        /** NB: The review year is part of the VOEPR
         * The engagementName is the preferred name of the Employee
         */
                
        private String engagementClient;
        private String engagementName;
        private String engagementRefNo;
        private Date engagementPeriodFrom;      
        private Date engagementPeriodTo;
        private String engagementReviewerName;
        private Integer engagementReviewerID;
        private String roleOnEngagement;
        
        private String version;
        
        // A Second constructor
        public VOEngagementDetails ()
        {
        }
                
        
        // Default Constructor
        public VOEngagementDetails (String aEngagementClient, String aEngagementName, 
        
String aEngagementRefNo, Date aPeriodFrom, 
        
Date aPeriodTo, String reviewerName, 
        
Integer reviewerID, String role)
        {
                this.engagementClient = aEngagementClient;
                this.engagementName = aEngagementName;
                this.engagementRefNo = aEngagementRefNo;
                this.engagementPeriodFrom = aPeriodFrom;
                this.engagementPeriodTo = aPeriodTo;
                this.engagementReviewerName = reviewerName;
                this.engagementReviewerID = reviewerID;
                this.roleOnEngagement = role;   
        }
        
        /**
         * Returns the engagementClient.
         * @return String
         */
        public String getEngagementClient() {
                return engagementClient;
        }

        /**
         * Returns the engagementName.
         * @return String
         */
        public String getEngagementName() {
                return engagementName;
        }

        /**
         * Returns the engagementPeriodFrom.
         * @return Date
         */
        public Date getEngagementPeriodFrom() {
                return engagementPeriodFrom;
        }

        /**
         * Returns the engagementPeriodTo.
         * @return Date
         */
        public Date getEngagementPeriodTo() {
                return engagementPeriodTo;
        }

        /**
         * Returns the engagementRefNo.
         * @return String
         */
        public String getEngagementRefNo() {
                return engagementRefNo;
        }

        

        
        /**
         * Returns the roleOnEngagement.
         * @return String
         */
        public String getRoleOnEngagement() {
                return roleOnEngagement;
        }

        /**
         * Returns the version.
         * @return String
         */
        public String getVersion() {
                return version;
        }

        /**
         * Sets the engagementClient.
         * @param engagementClient The engagementClient to set
         */
        public void setEngagementClient(String engagementClient) {
                this.engagementClient = engagementClient;
        }

        /**
         * Sets the engagementName.
         * @param engagementName The engagementName to set
         */
        public void setEngagementName(String engagementName) {
                this.engagementName = engagementName;
        }

        /**
         * Sets the engagementPeriodFrom.
         * @param engagementPeriodFrom The engagementPeriodFrom to set
         */
        public void setEngagementPeriodFrom(Date engagementPeriodFrom) {
                this.engagementPeriodFrom = engagementPeriodFrom;
        }

        /**
         * Sets the engagementPeriodTo.
         * @param engagementPeriodTo The engagementPeriodTo to set
         */
        public void setEngagementPeriodTo(Date engagementPeriodTo) {
                this.engagementPeriodTo = engagementPeriodTo;
        }

        /**
         * Sets the engagementRefNo.
         * @param engagementRefNo The engagementRefNo to set
         */
        public void setEngagementRefNo(String engagementRefNo) {
                this.engagementRefNo = engagementRefNo;
        }

        
        /**
         * Sets the roleOnEngagement.
         * @param roleOnEngagement The roleOnEngagement to set
         */
        public void setRoleOnEngagement(String roleOnEngagement) {
                this.roleOnEngagement = roleOnEngagement;
        }

        /**
         * Sets the version.
         * @param version The version to set
         */
        public void setVersion(String version) {
                this.version = version;
        }

        /**
         * Returns the engagementReviewerID.
         * @return Integer
         */
        public Integer getEngagementReviewerID()
        {
                return engagementReviewerID;
        }

        /**
         * Returns the engagementReviewerName.
         * @return String
         */
        public String getEngagementReviewerName()
        {
                return engagementReviewerName;
        }

        /**
         * Sets the engagementReviewerID.
         * @param engagementReviewerID The engagementReviewerID to set
         */
        public void setEngagementReviewerID(Integer engagementReviewerID)
        {
                this.engagementReviewerID = engagementReviewerID;
        }

        /**
         * Sets the engagementReviewerName.
         * @param engagementReviewerName The engagementReviewerName to set
         */
        public void setEngagementReviewerName(String engagementReviewerName)
        {
                this.engagementReviewerName = engagementReviewerName;
        }



############################################################################
##### ############################################################################
#####
THE END ! - hope ya still with me ! 
############################################################################
##### ############################################################################
#####

-----Original Message-----
From: Sri Sankaran [mailto:Sri.Sankaran@;sas.com]
Sent: Saturday, 2 November 2002 12:47 AM
To: Struts Users Mailing List
Subject: RE: Nested properties of form bean not being updated !


You have a clear description of what you are trying to accomplish but I don't know 
*how* you are going about it.

Need a look-see at your code.  In particular, how are your struts-config and JSP set 
up?  Show the pertinent form-bean and action mapping from your config and a portion 
(at least) or your <html:form> in the JSP.

Sri

-----Original Message-----
From: Parnell, Giles (AU - Sydney) [mailto:g.parnell@;eclipsegroup.com.au] 
Sent: Friday, November 01, 2002 12:04 AM
To: '[EMAIL PROTECTED]'
Subject: Nested properties of form bean not being updated !




Hi

I'm having problems updating the nested properties of an action form bean.... can 
anyone help ?

I have a nested bean, say Address that lives within another bean, say Person. Both are 
value objects, which extend action form bean. I have the correct getters and setters 
set-up for both these beans. 
When I retrieve these values from the server, and populate my value objects I get all 
the fields displaying as should be.... i.e. both the Person and Address VOs contain 
and display my expected data. 

However, when I try and do an update on Person and do a submit, the form attribute in 
my action contains only the updated values of Person, and not the updated values of 
the nested bean - Address.

I'm using struts1.0.2 and have looked at the nested tag of the beta version of struts 
1.1-b2 From what I can gather the beta doesn't really provide any additional 
functionality for my needs other than providing a cleaner and more manageable 
interface. (I can't use the beta as it's not production yet, and my company won't take 
that step.)

Can anyone shed some light??? 
Regards
Giles


Giles Parnell |    ECLIPSEGROUP   |   02 9322 5124   |   Mobile 0403 768656

Level 9, 190 George Street, Sydney, NSW 2000, Fax: 02 9322 5121

INTERACTIVE STRATEGY + DESIGN + INTEGRATION

> The Eclipse Group is a wholly owned subsidiary of Deloitte Touche
> Tohmatsu
> 
www.eclipsegroup.com.au

This email and any files transmitted with it are confidential and intended solely 
for the use of the individual or entity to whom they are addressed. 
If you are not the intended recipient of this email, you must not disseminate, 
copy or otherwise use this information. If you have received this email in error, 
please notify Eclipse Group immediately.



--
To unsubscribe, e-mail: <mailto:struts-user-unsubscribe@;jakarta.apache.org>
For additional commands, e-mail: <mailto:struts-user-help@;jakarta.apache.org>

--
To unsubscribe, e-mail:   <mailto:struts-user-unsubscribe@;jakarta.apache.org>
For additional commands, e-mail: <mailto:struts-user-help@;jakarta.apache.org>

Reply via email to