Hi Sri I've got the keyboardmonkey installed into my app. Just a quickie - how do you tell the nested tag what form bean you're dealing with. Before we specified the "name" attribute in the write tag to indicate which bean we were referring to.
In 64_eng_del I've now got a portion that looks like this: <nested:nest property="voEngagementDetails"> <%-- Engagement Client--%> <td class="tbl_2" height="25">* engagement client</td> <td class="tbllefttext" width="257" colspan="2"> <nested:text size="50" property="engagementClient"/> </nested:nest> ... but there's nowhere to say where this 'voEngagementDetails' is coming from. (ie attached to which bean) I get a nullpointer when trying to run this. org.apache.struts.taglib.nested.NestedPropertyHelper.getNestedProperty(Neste dPropertyHelper.java:174 Is this the correct way to use this tag. Cheers Giles -----Original Message----- From: Sri Sankaran [mailto:Sri.Sankaran@;sas.com] Sent: Tuesday, 5 November 2002 2:26 PM To: Struts Users Mailing List Subject: RE: Nested properties of form bean not being updated ! Giles: I am sorry. Going from the subject line I assumed you were trying to use the nesting extension. I am using Struts 1.0.2 along with the nesting extension from Arron Bates site www.keyboardmonkey.com/next/index.jsp. This is not beta-ware so you should be able to use it. All the dot notation and everything advertised works. So, you can and *should* use the nesting extension. Spend the hour or so learning how to use it -- it will save you a lot of work/worry/hassle. Wherever I have a nested hierarchy to deal with, especially with iterations, I use the extension. Hope you are able to work with it. Sri -----Original Message----- From: Parnell, Giles (AU - Sydney) [mailto:g.parnell@;eclipsegroup.com.au] Sent: Monday, November 04, 2002 8:28 PM To: 'Struts Users Mailing List' Subject: RE: Nested properties of form bean not being updated ! Hi Sri I've made the small change to the included file - 64_eng_del.jsp - didn't help much I'm afraid. We are not using the nested tags because at the moment struts 1.1-b2 is still in beta (Is this the only version with the nested tag ???) My company has made the firm decision that we cannot use beta software in the production environment. I was under the impression that the benefit of the nested tags didn't offer much more additional functionality from the dot notation of struts 1.0.2, i.e. it is just a way of structuring your code in a better manner. (could be way wrong here too!) I suppose the question I need to ask Sri, is : Is what I am trying to do possible in my version of struts? Is the dot notation fully functional in 1.0.2? I know it's returning the correct stuff from the server, it's just not updating it. Does this functionality work in Struts1.02? Was it EVER possible to do this before nested tags came out? If the nested tag is my only option, do you have any idea when struts1.1 will become production stable? I've seen there was a code freeze in august, but haven't seen anything since. Other than that, know anything else I might be able to try ??? Cheers Giles -----Original Message----- From: Sri Sankaran [mailto:Sri.Sankaran@;sas.com] Sent: Tuesday, 5 November 2002 2:12 AM To: Struts Users Mailing List Subject: RE: Nested properties of form bean not being updated ! 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> -- To unsubscribe, e-mail: <mailto:struts-user-unsubscribe@;jakarta.apache.org> For additional commands, e-mail: <mailto:struts-user-help@;jakarta.apache.org>