Hi I can confirm that it is possible to use the sj:tabbedpanel tag within a form. I've included a working example below (sorry about the size). One important thing to note is that you need to set theme="simple" on your s:form tag. If you use the default style which uses tables for layout and look at the generated HTML you will see that your tabs are totally screwed. (This also happens if you design a s:form using the <fieldset> tag)
HTH Regards <s:form action="edit-rma" theme="simple" method="POST"> <s:hidden name="rmaId" value="%{rmaId}"/> <s:if test="%{fieldErrors.size > 0}"> You have errors on this page </s:if> <sj:tabbedpanel id="localtabs" selectedTab="0"> <sj:tab id="tab1" target="productDetails" label="Product"/> <sj:tab id="tab2" target="customerDetails" label="Customer" /> <sj:tab id="tab3" target="repairDetails" label="Repair"/> <sj:tab id="tab4" target="shippingDetails" label="Shipping"/> <div id="productDetails"> <table> <tr> <td class="tdLabel"><label for="rma.serialNumber">Serial Number:</label></td> <td><s:textfield name="rma.serialNumber" value="%{rma.serialNumber}"/> <s:fielderror><s:param>rma.serialNumber</s:param></s:fielderror></td> </tr> <tr> <td class="tdLabel"><label for="rma.UnitNumber">Unit Number:</label></td> <td><s:textfield name="rma.unitNumber" value="%{rma.unitNumber}"/></td> </tr> <tr> <td class="tdLabel"><label for="rma.faultDescription.comment">Fault Description:</label> <td><s:textarea cols="45" name="rma.faultDescription.comment" value="%{rma.faultDescription.comment}"/> </tr> </table> <table id="requestItems"> <tr> <th>Requested Items.</th> <th>Value.</th> </tr> <tr class="requested"> <td><s:textfield cssClass="description" name="rma.requestedItems[0].description" value="%{rma.requestedItems[0].description}"/></td> <td><s:textfield name="rma.requestedItems[0].value" value="%{rma.requestedItems[0].value}"/> <s:fielderror><s:param>rma.requestedItems[0].value</s:param></s:fielderror></td> <td id="cell1" onclick="clickFunction(this)"> resources/images/plus.jpeg </td> </tr> <tr class="requested"> <td><s:textfield cssClass="description" name="rma.requestedItems[1].description" value="%{rma.requestedItems[1].description}"/></td> <td><s:textfield name="rma.requestedItems[1].value" value="%{rma.requestedItems[1].value}"/> <s:fielderror><s:param>rma.requestedItems[1].value</s:param></s:fielderror></td> <td id="cell2" onclick="clickFunction(this)"> resources/images/plus.jpeg </td> </tr> <tr class="requested"> <td><s:textfield cssClass="description" name="rma.requestedItems[2].description" value="%{rma.requestedItems[2].description}"/></td> <td><s:textfield name="rma.requestedItems[2].value" value="%{rma.requestedItems[2].value}"/> <s:fielderror><s:param>rma.requestedItems[2].value</s:param></s:fielderror></td> <td id="cell3" onclick="clickFunction(this)"> resources/images/plus.jpeg </td> </tr> <tr class="requested"> <td><s:textfield cssClass="description" name="rma.requestedItems[3].description" value="%{rma.requestedItems[3].description}"/></td> <td><s:textfield name="rma.requestedItems[3].value" value="%{rma.requestedItems[3].value}"/> <s:fielderror><s:param>rma.requestedItems[3].value</s:param></s:fielderror></td> <td id="cell4" onclick="clickFunction(this)"> resources/images/plus.jpeg </td> </tr> <tr class="requested"> <td><s:textfield cssClass="description" name="rma.requestedItems[4].description" value="%{rma.requestedItems[4].description}"/></td> <td><s:textfield name="rma.requestedItems[4].value" value="%{rma.requestedItems[4].value}"/> <s:fielderror><s:param>rma.requestedItems[4].value</s:param></s:fielderror></td> <td id="cell5" onclick="clickFunction(this)"> resources/images/plus.jpeg </td> </tr> <tr class="requested"> <td><s:textfield cssClass="description" name="rma.requestedItems[5].description" value="%{rma.requestedItems[5].description}"/></td> <td><s:textfield name="rma.requestedItems[5].value" value="%{rma.requestedItems[5].value}"/> <s:fielderror><s:param>rma.requestedItems[5].value</s:param></s:fielderror></td> <td></td> </tr> </table> </div> <div id="customerDetails"> <table> <tr> <td class="tdLabel"><s:label for="rma.customer.memberId">Forum Id:</s:label></td> <td><s:textfield name="rma.customer.memberId" value="%{rma.customer.memberId}"/> <s:fielderror><s:param>rma.customer.memberId</s:param></s:fielderror> <td> </tr> <tr> <td class="tdLabel"><s:label for="rma.customer.memberName">Forum Name:</s:label></td> <td><s:textfield name="rma.customer.memberName" value="%{rma.customer.memberName}"/></td> </tr> <tr> <td class="tdLabel"><s:label for="rma.customer.firstName">First Name:</s:label></td> <td><s:textfield name="rma.customer.firstName" value="%{rma.customer.firstName}"/></td> </tr> <tr> <td class="tdLabel"><s:label for="rma.customer.lastName">Last Name:</s:label></td> <td><s:textfield name="rma.customer.lastName" value="%{rma.customer.lastName}"/></td> </tr> <tr> <td class="tdLabel"><s:label for="rma.customer.address.addressLine1">Address Line 1:</s:label></td> <td><s:textfield name="rma.customer.address.addressLine1" value="%{rma.customer.address.addressLine1}"/></td> </tr> <tr> <td class="tdLabel"><s:label for="rma.customer.address.addressLine2">Address Line 2:</s:label></td> <td><s:textfield name="rma.customer.address.addressLine2" value="%{rma.customer.address.addressLine2}"/></td> </tr> <tr> <td class="tdLabel"><s:label for="rma.customer.address.addressLine3">Address Line 3:</s:label></td> <td><s:textfield name="rma.customer.address.addressLine3" value="%{rma.customer.address.addressLine3}"/></td> </tr> <tr> <td class="tdLabel"><s:label for="rma.customer.address.addressLine4">Address Line 4:</s:label></td> <td><s:textfield label="Address Line 4" name="rma.customer.address.addressLine4" value="%{rma.customer.address.addressLine4}"/></td> </tr> <tr> <td class="tdLabel"><s:label for="rma.customer.address.addressLine5">Address Line 5:</s:label></td> <td><s:textfield name="rma.customer.address.addressLine5" value="%{rma.customer.address.addressLine5}"/></td> </tr> <tr> <td class="tdLabel"><s:label for="rma.customer.phoneNumber.number">Phone Number:</s:label></td> <td><s:textfield label="Phone Number" name="rma.customer.phoneNumber.number" value="%{rma.customer.phoneNumber.number}"/> <s:fielderror><s:param>rma.customer.phoneNumber.number</s:param></s:fielderror><td> </tr> <tr> <td class="tdLabel"><s:label for="rma.customer.email">Email Address:</s:label></td> <td><s:textfield label="Email Address" name="rma.customer.email" value="%{rma.customer.email}"/> <s:fielderror><s:param>rma.customer.email</s:param></s:fielderror></td> </tr> </table> </div> <div id="repairDetails"> <table> <tr> <td class="tdLabel"><s:label for="warrantyDate">Warranty/Shipping Status (dd.mm.yyyy):</s:label></td> <td><s:textfield name="warrantyDate" value="%{warrantyDate}"/> <s:fielderror><s:param>warrantyDate</s:param></s:fielderror> </td> </tr> <tr> <td class="tdLabel"><s:label for="goodInDate">Goods In Date (dd.mm.yyyy):</s:label></td> <td><s:textfield name="goodsInDate" value="%{goodsInDate}"/> <s:fielderror><s:param>goodsInDate</s:param></s:fielderror> </td> </tr> <tr> <td class="tdLabel"><s:label for="rma.goodsInDescription.comment">Goods In condition:</s:label></td> <td><s:textarea label="Goods In Condition" cols="45" name="rma.goodsInDescription.comment" value="%{rma.goodsInDescription.comment}"/></td> </tr> <tr> <td class="tdLabel"><s:label for="rma.repairDetails.comment">Repair Details:</s:label></td> <td><s:textarea cols="45" name="rma.repairDetails.comment" value="%{rma.repairDetails.comment}"/><td> </tr> <tr> <td class="tdLabel"><s:label for="rma.repairCost">Cost of Repairs</s:label></td> <td><s:textfield name="rma.repairCost" value="%{rma.repairCost}"/> <s:fielderror><s:param>rma.repairCost</s:param></s:fielderror> </td> </tr> <tr> <td class="tdLabel"><s:label for="rma.generalRemarks.coment">Other Comments:</s:label></td> <td><s:textarea cols="45" name="rma.generalRemarks.comment" value="%{rma.generalRemarks.comment}"/></td> </tr> </table> </div> <div id="shippingDetails"> <table> <tr> <td class="tdLabel"><s:label for="shippingDate">Shipping Date (dd.mm.yyyyy):</s:label></td> <td><s:textfield name="shippingDate" value="%{shippingDate}"/></td> <s:fielderror><s:param>shippingDate</s:param></s:fielderror> </tr> <tr> <td class="tdLabel"><s:label for="rma.courier">Courier:</s:label></td> <td><s:textfield name="rma.courier" value="%{rma.courier}"/></td> </tr> <tr> <td class="tdLabel"><s:label for="rma.trackerNumber">Tracker No:</s:label></td> <td><s:textfield name="rma.trackerNumber" value="%{rma.trackerNumber}"/></td> </tr> <tr> <td class="tdLabel"><s:label for="rma.shippingCost">Shipping Cost:</s:label></td> <td><s:textfield name="rma.shippingCost" value="%{rma.shippingCost}"/> <s:fielderror><s:param>rma.shippingCost</s:param></s:fielderror> </td> </tr> <tr> <td class="tdLabel"><s:label for="rma.shippingComment">Shipping Comment:</s:label></td> <td><s:textarea cols="45" name="rma.shippingComment.comment" value="%{rma.shippingComment.comment}"/></td> </tr> </table> </div> </sj:tabbedpanel> <sj:submit cssClass="vMenuItemText" targets="rmaDetails" onCompleteTopics="reloadGrid"/> </s:form> -- View this message in context: http://struts.1045723.n5.nabble.com/How-to-use-tabbed-panels-with-s-form-tp4910789p4920522.html Sent from the Struts - User mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: user-unsubscr...@struts.apache.org For additional commands, e-mail: user-h...@struts.apache.org