[ https://issues.apache.org/jira/browse/OFBIZ-3650?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Blas Rodriguez Somoza closed OFBIZ-3650. ---------------------------------------- Resolution: Later working on it > XHTML Validation - Form Widget with type= list|multi and > separate-columns="true" renders bad markup > --------------------------------------------------------------------------------------------------- > > Key: OFBIZ-3650 > URL: https://issues.apache.org/jira/browse/OFBIZ-3650 > Project: OFBiz > Issue Type: Bug > Components: framework > Affects Versions: SVN trunk > Reporter: Blas Rodriguez Somoza > Fix For: SVN trunk > > > Widgets with separate-columns="true" could generate bad markup. > The problem exists in the header and item rows > For the item rows: > ModelForm.java (lines starting at 1269) > if (innerFormFields.size() > 0) { > // TODO: manage colspan > > formStringRenderer.renderFormatHeaderRowFormCellOpen(writer, context, this); > Iterator<ModelFormField> innerFormFieldsIt = > innerFormFields.iterator(); > while (innerFormFieldsIt.hasNext()) { > ModelFormField modelFormField = > innerFormFieldsIt.next(); > if (separateColumns || > modelFormField.getSeparateColumn()) { > > formStringRenderer.renderFormatItemRowCellOpen(writer, context, this, > modelFormField, 1); > } > // render title (unless this is a submit or a reset > field) > formStringRenderer.renderFieldTitle(writer, context, > modelFormField); > if (separateColumns || > modelFormField.getSeparateColumn()) { > > formStringRenderer.renderFormatItemRowCellClose(writer, context, this, > modelFormField); > } > if (innerFormFieldsIt.hasNext()) { > // TODO: determine somehow if this is the last > one... how? > if (!separateColumns && > !modelFormField.getSeparateColumn()) { > > formStringRenderer.renderFormatHeaderRowFormCellTitleSeparator(writer, > context, this, modelFormField, false); > } > } > } > > formStringRenderer.renderFormatHeaderRowFormCellClose(writer, context, this); > } > and from htmlFormMacroLibrary.ftl > renderFormatHeaderRowFormCellOpen translates to "<td ....>" > renderFormatItemRowCellOpen translates to "<td .....>" > renderFormatItemRowCellClose translates to "</td>" > renderFormatHeaderRowFormCellClose translates to "</td>" > if the conditions (innerFormFields.size() > 0) and (separateColumns || > modelFormField.getSeparateColumn()) are meet then the rendered markup will be: > <td> > <td>...field </td> > <td>...field </td> > ... > </td> > Which is a wrong markup code. > The browser usually will close the first duplicated <td> creating a new cell > and remove the duplicated </td>. > Due to this error, a phantom column will appear in the list (see the forum > list in Content -> Forum) > The only solution I know for this issue maintaining the form parameter names, > needs some javascript. > The idea is you need two forms, the master one hidden which is outside the > table and will be used for the submit and another one which is the parent of > the table and contains the input/select/submit etc for each row. > When a row submit button is clicked, it call a javascript function which > copies the values from the row to the master form and submit it. > The following is an xhtml page implementing this idea. > <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" > "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> > <html> > <head> > <title>Table with editable rows</title> > </head> > <body> > <form name="rowList" action=""> > <input type="hidden" name="rowId" value=""/> > <input type="hidden" name="field1" value=""/> > <input type="hidden" name="field2" value=""/> > <input type="hidden" name="field3" value=""/> > <input type="hidden" name="field4" value=""/> > </form> > <script type="text/javascript"> > function submit_rowList(rowId, ele1, ele2, ele3, ele4) > { > base_form = document.forms['rowList']; > table_form = document.forms['rowList_table']; > base_form.rowId.value = rowId; > base_form.field1.value = table_form.elements[ele1].value; > base_form.field2.value = table_form.elements[ele2].value; > base_form.field3.value = table_form.elements[ele3].value; > base_form.field4.value = > table_form.elements[ele4].options[table_form.elements[ele4].selectedIndex].value; > base_form.submit(); > } > </script> > <form name="rowList_table" action=""> > <table> > <tr> > <td> > <input type="text" name="field1_0" value="A0"/> > </td> > <td> > <input type="text" name="field2_0" value="B0"/> > </td> > <td> > <input type="text" name="field3_0" value="C0"/> > </td> > <td> > <select name="field4_0"> > <option selected="selected">choose > 1</option> > <option>choose 2</option> > </select> > </td> > <td> > <input type="button" name="boton_0" > onclick="javascript:submit_rowList(0,'field1_0','field2_0', 'field3_0', > 'field4_0');"/> > </td> > </tr> > <tr> > <td> > <input type="text" name="field1_1" value="A1"/> > </td> > <td> > <input type="text" name="field2_1" value="B1"/> > </td> > <td> > <input type="text" name="field3_1" value="C1"/> > </td> > <td> > <select name="field4_1"> > <option>choose 1</option> > <option selected="selected">choose > 2</option> > </select> > </td> > <td> > <input type="button" name="boton_0" > onclick="javascript:submit_rowList(1,'field1_1','field2_1', 'field3_1', > 'field4_1');"/> > </td> > </tr> > </table> > </form> > </body> > </html> -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.